문제
오늘은 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])
'알고리즘' 카테고리의 다른 글
[Python] 퀵 정렬 알고리즘/ 이것이 코딩테스트다 정렬편 (0) | 2023.01.30 |
---|---|
[Python] DFS/BFS 알고리즘 / 백준 1260 그림 풀이 / (1) | 2023.01.29 |
[Python] 그리디 알고리즘백준 1783번 병든 나이트 풀이 /자세한 그림 풀이... (1) | 2023.01.23 |
[Python] DP(Dynamic Programming) 알고리즘이 뭘까?/ 개미전사 풀이 / 백준 1463번 1로 만들기 풀이 (0) | 2023.01.22 |
[Python] 그리디 알고리즘이란 무엇일까? /백준 11047 동전 0 파이썬 풀이 (2) | 2023.01.22 |