[JAVA] 백준 1924번 (2007년)


문제

오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오.

입력: 첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

출력: 첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT중 하나를 출력한다.

예제 입력: 3 14         예제 출력: WED

문제 이해

2007년에 날짜를 입력하고 어떤 요일인지 출력하는 문제이다

해결

1. 스캐너를 사용해 M() D() 값을 입력받는다
2. Month 값에 1~12월까지 한달에 며칠이 있는지 선언한다
2. Day 배열에는 일요일부터 월요일까지 값을 넣는다
    -> 일요일부터 시작해야 순서가 밀리지 않는다
3. for (0부터 입력받은 달까지 반복)
       result에 1월부터 입력받은 달까지의 모든 날짜를 누적합 시킴
4.Day배열[result를 7 나눈 나머지] 구함
    -> 1 1일부터 입력받은 달까지 누적으로 합을 구했기 때문에 일주일로 나눈 나머지는 M D의 요일을 찾는다

구현

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int M = sc.nextInt();
        int D = sc.nextInt();
        sc.close();

        int[] Month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        String[] Day = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};

        int result = D;
        for (int i = 0; i < M - 1; i++) {
            result += Month[i];
        }
        System.out.print(Day[result % 7]);
    }
}