본문 바로가기

백준/Java

[JAVA] 해당 날짜의 요일 구하기

백준 1924번 문제 (브론즈 1)

https://www.acmicpc.net/problem/1924

 

조건

x, y값을 입력 받고 해당 날짜의 요일을 출력한다. (1월 1일은 월요일)

 

접근

  1. 입력받은 y일에 x월 전까지의 날짜를 합하여 계산하였다.(누적합)
    ex) 2월 1일의 경우, 1월의 일 수 31일 다음인 32일째이다.

1-1. 그러기 위해 각 월별로 일 수배열에 저장해 놓았다.

  1. 요일을 구하기 위해 7로 나누어 나머지로 판별했다.

 

코드

두가지 방식(switch case 구문, 배열 인덱스로 접근)으로 문제를 풀었다.

 

1. switch case 구문 활용

import java.util.*;
public class Main {
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        //총 일수를 구하기 위해 각 월의 일 수를 배열로 저장 
        int [] dayList = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};

        int month = sc.nextInt();
        int daySum = sc.nextInt();
        //입력받은 month의 직전 month까지 일 수를 더하는 구문
        for(int i = 0; i < month-1; i++){
            daySum += dayList[i];
        }
        //요일을 구하기 위해 7로 나눈 나머지 저장
        int calcDay = daySum % 7;

        switch(calcDay){
            case 0:
                System.out.println("SUN");
                break;
            case 1:
                System.out.println("MON");
                break;
            case 2:
                System.out.println("TUE");
                break;
            case 3:
                System.out.println("WED");
                break;
            case 4:
                System.out.println("THU");
                break;
            case 5:
                System.out.println("FRI");
                break;
            case 6:
                System.out.println("SAT");
                break;
        }
    }
}

 

2. 요일을 저장한 배열 활용, 인덱스로 접근

import java.util.*;
public class Main {
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        int [] dayList = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
        String [] dayOfWeek = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
        int month = sc.nextInt();
        int daySum = sc.nextInt();
        for(int i = 0; i < month-1; i++){
            daySum += dayList[i];
        }
        int calcDay = daySum % 7;
        System.out.println(dayOfWeek[calcDay]);
    }
}

 

결과 

  메모리 시간 코드 길이
switch-case 17732 KB 172 ms 1035 B
배열 인덱스 접근 17716 KB 172 ms 527 B