본문 바로가기

백준/JAVA

[Baekjoon/JAVA] 1924번 - 2007년

[백준] Baekjoon Online Judge

문제로 이동

 

문제

오늘은 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중 하나를 출력한다.

 


예제 입력 예제 출력
1 1 MON
3 14 WED
9 2 SUN
12 25 TUE

풀이

import java.util.Scanner;

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

        String day[] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"}; // 요일
        int monthDay[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 각 달의 마지막 날

        int x = in.nextInt(); // x월
        int y = in.nextInt(); // y일

        int dayCount = y; // x월 y일이 1월 1일부터 며칠 뒤인가?
        for (int i = 0; i < x - 1; i++)
            dayCount += monthDay[i];

        // 출력
        System.out.println(day[dayCount % 7]);
    }
}

1월 1일이 월요일인데, 이날은 다르게 말해 2007년이 시작된지 1일이 지난 시점이다. 또한 n % 7 == 1인 또다른 날들도 월요일이 될 것이다. 그 다음 날인 1월 2일, 2007년이 시작된지 2일 지난 날은 2 % 7 == 2이며 화요일이다.

즉, x월 y일이 무슨 요일인지 알고 싶다면 해당 날이 2007년이 시작된지 얼마나 지난 날인지 구하고, 그 값을 % 7하면 된다.

'백준 > JAVA' 카테고리의 다른 글

[Baekjoon/JAVA] 1934번 - 최소공배수  (0) 2023.01.26
[Baekjoon/JAVA] 9214번 - 첫 번째 항  (0) 2023.01.25
[Baekjoon/JAVA] 1855번 - 암호  (0) 2023.01.23
[Baekjoon/JAVA] 1731번 - 추론  (0) 2023.01.22
[Baekjoon/JAVA] 1718번 - 암호  (1) 2023.01.21