티스토리 뷰

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

1. 문제

 

2. 정답 코드

m, d = map(int, input().split())

MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
DAYS = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']

# 1월 1일 월요일

total_days = d # 입력 월의 days에
for n in MONTH[:m-1] :
    total_days += n # 입력 월 이전 days (=n) 더하기

index = total_days % 7 - 1
print(DAYS[index])
  • DAYS가 'SUN'이 아니라 'MON'으로 시작하는 이유는 1월 1일이 월요일이기 때문에 계산을 편하게 하기 위함이다.
  • m월 d일을 모두 days로 변환하였다.
    • ex) 2월 5일 => 31 (1월 days) + 5 = 36
  • 전체 days를 요일의 개수 7로 모듈러 연산하였다.
    • ex) 36 % 7 = 1
  • 모듈러 연산 후 1을 빼는 이유는 DAYS 리스트가 1이 아니라, 0부터 시작하기 때문이다.
728x90