본문 바로가기

백준

2024.6.27 백준(Python) 1924 2007년

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

예제 입력 1 

1 1

예제 출력 1 

MON

예제 입력 2 

3 14

예제 출력 2 

WED

예제 입력 3 

9 2

예제 출력 3 

SUN

예제 입력 4 

12 25

예제 출력 4 

TUE

 

정답 코드

# 사용자로부터 월과 일을 공백으로 구분하여 입력받고, 정수형으로 변환하여 변수 x와 y에 저장합니다.
x, y = map(int, input().split())

# 각 월의 일수에 따라 요일을 이동하기 위해 기준 요일을 설정합니다.
# Day_week 리스트는 요일을 순서대로 저장한 리스트입니다.
Day_week = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']

# 요일 리스트의 길이를 변수 leng에 저장합니다.
leng = len(Day_week)

# 이동할 요일을 계산하기 위해 초기 값으로 0을 설정합니다.
Week_select = 0

# 1월부터 입력받은 월 x까지의 월별 일수를 기준으로 요일 이동을 계산합니다.
for i in range(1, x + 1):
    # 2월, 4월, 6월, 8월, 9월, 11월은 31일을 가진 월이 아니므로, 이 경우 3칸씩 이동합니다.
    if i == 2 or i == 4 or i == 6 or i == 8 or i == 9 or i == 11:
        Week_select += 3
    
    # 5월, 7월, 10월, 12월은 31일을 가진 월이므로, 이 경우 2칸씩 이동합니다.
    if i == 5 or i == 7 or i == 10 or i == 12:
        Week_select += 2
    
    # 현재 이동한 요일 값이 요일 리스트 길이보다 크거나 같으면, 요일 리스트의 길이만큼 빼서 요일이 순환하도록 합니다.
    if Week_select >= leng:
        Week_select -= leng

# 마지막으로 이동할 요일을 한 칸 감소시킵니다.
# 이는 현재 월의 마지막 요일이 이전 월의 마지막 요일에 이어지기 때문입니다.
Week_select -= 1

# 입력받은 일수 y 만큼 요일을 추가로 이동합니다.
for i in range(y):
    # 일수를 하나씩 증가시키며 요일을 이동합니다.
    Week_select += 1
    
    # 이동한 요일 값이 요일 리스트 길이보다 크거나 같으면, 요일 리스트의 길이만큼 빼서 요일이 순환하도록 합니다.
    if Week_select >= leng:
        Week_select -= leng

# 최종적으로 계산된 요일을 출력합니다.
print(Day_week[Week_select])