[Python] 백준 알고리즘 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중 하나를 출력한다.

예제 입력 1 

1 1

예제 출력 1 

 

MON

예제 입력 2 

3 14

 

예제 출력 2 

WED
 
 
 
 

아이디어 생각하기

 

 

["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]에서

1월 1일은 1번째 "MON",

1월 2일은 2번째 "TUE"

........

1월 6일은 6번째인 "SAT"

 

다시 0번째부터시작하여,

1월 7일은 0번째인 "SUN"

1월 8일은 1번째인 "MON"

................

 

이를 통해 특정 반복 알고리즘을 발견할 수 있다.

총 일수를 다 더한 후, 7로 나눈 나머지가 요일이다.

 

1월 31일은 31일이 지난 것이므로

31%7인 3번째 요일

1월 31일은 "WED"

 

2월 1일은 32일이 지난 것이므로

32%7인 4번째요일

2월 1일은 "THU"가 된다.

 

 

쉽게 풀자면

2월 27일을 구하고 싶다면

(1) 1월 1일~2월 27일의 총 요일수를 구하고,

 

(2) 이를 7로 나눈 나머지가 요일이 된다.

 

2월 27일까지는 총 58일이므로,

58 % 7 = 2

list의 2번째 요소인 "TUE"가 출력된다.

 

 

 

 # 요일을 담은 list a
a  = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]
 #월별 총 일수를 담은 list, 
 # b[0]는 1월, b[1]는 2월, ..... b[11]는 12월의 총 한 달 일수
b = [31,28,31,30,31,30,31,31,30,31,30,31]
day = 0 

 # 입력값 받기 m:월 d:일
m, d = map(int, input().split()) 

 # 입력한 m의 그 전까지의 총 일수를 다 더한다.  
 # 1월이면 아무것도 더하지 않고, 3월이면 1월~2월까지의 일수를 더한다
for i in range (0, m-1) :
  day += b[i]

 # 요일은 a에서 (day + 입력 일수)를 7로 나눈 나머지값을 순서로 하는 값이다
answer = (day + d) %7
print(a[answer])