반응형
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년도에서만 사용할 수 있다.
문제 이미지 첨부
반응형
'알고리즘' 카테고리의 다른 글
백준 2442 별 찍기 - 5 파이썬 풀이 (0) | 2024.01.18 |
---|---|
백준 2441 별 찍기 - 4 파이썬 풀이 (0) | 2024.01.18 |
백준 11721 열 개씩 끊어 출력하기 파이썬 풀이 (0) | 2024.01.17 |
백준 10953 A+B - 6 파이썬 풀이 (0) | 2024.01.17 |
백준 1316 그룹 단어 체커 파이썬 풀이 (0) | 2024.01.16 |