알고리즘

백준 1924 2007년 파이썬 풀이

물에빠진사람 2024. 1. 18. 00:20
반응형

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

 

1924번: 2007년

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

www.acmicpc.net

 

접근법

달력은 0~6 인덱스로 되어 있는 2차원 배열이라고 볼 수 있다. 단지 매월 30, 31의 주기로 1로 초기화 되는 것이다. 그럼 1월 1일부터 시작해서 매월 1로 초기화 되지 않으면 간단하게 7로 나눠서 요일을 구할 수 있을 것이라 생각했다.

 

코드

day_of_the_week = {0 : "MON", 1 : "TUE", 2 : "WED", 3 : "THU", 4 : "FRI", 5 : "SAT", 6 : "SUN"}
x, y = map(int,input().split())
days = y
for i in range(1, x) :
    if i < 8 and i % 2 == 1 :
        days += 31
    elif i < 8 and i % 2 == 0 :
        if i == 2 :
            days += 28
        else :
            days += 30
    elif i > 8 and i % 2 == 1 :
        days += 30
    else :
        days += 31
key_val = (days - 1) % 7        # 인덱스는 0부터 시작하는데 반해 일(日)은 1부터 시작하기에 1을 빼주었다.
print(day_of_the_week[key_val])

 

 

문제에 각 월에 며칠씩 있는지 정확하게 명시해주었고 윤년에 대해서도 신경쓰지 않아도 되는 문제라서 살짝 하드 코딩 된 부분이 없지 않다. 문제에 언급된 해, 아마도 2007년도에서만 사용할 수 있다. 

 

문제 이미지 첨부

 

반응형