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

 

✏️ 내가 작성한 코드

import sys
x,y = map(int,sys.stdin.readline().strip().split())
mon = [31,28,31,30,31,30,31,31,30,31,30,31] # 1월부터 각 월의 마지막 날짜를 리스트에 담는다.
week = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']
totalDay = 0

for i in range(x-1):
    totalDay += mon[i]

totalDay = totalDay + y
print(week[totalDay%7])

 

✏️ 참고

1월1일은 월요일.

1월2일은 화요일

1월3일은 수요일

...

1월7일은 일요일

x월y일은 ○요일

 

y 나누기 7을 했을 때 나머지 값으로 요일을 알 수 있다.

나머지가 1일때 월요일, 2일때 화요일 , 3일때 수요일 , ..., 0일때 일요일 이다.

1월은 이렇게 나머지로 확인할 수 있다 그렇다면 2월부터는 나머지 값이 달라질텐데 그럼 어떻게 해야할까?

(ex. 2월1일에서 1일이니까 나머지가 1인데 요일은 목요일이다.)

 

요일,날짜는 계속 '이어지는' 존재이므로 '합쳐서' 생각해야한다.

2월1일의 요일을 구해보자.

2월1일은 1월32일과 같다.(32일은 없는 일자지만 이어지는 존재로 생각해본다면..)

32나누기7의 나머지는 4로 목요일인 것을 확인할 수 있다.

 

→ 따라서 x월y일의 요일을 구하려면

(1) x-1월까지의 날짜를 모두 합하고(mon리스트 활용)

(2) 거기에 y일을 더해서 totalDay 변수에 넣고

(3) 나누기 7을 해서 나머지를 구한 다음 week 배열에서 요일을 구하면 된다.

+ Recent posts