안녕하세요. 성조입니다.
이 포스팅은 Python 3 버전을 기준으로 풀이됐습니다.
문제 출처
https://www.acmicpc.net/problem/1924
문제
오늘은 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중 하나를 출력한다.
코드
x, y = map(int, input().split())
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
total_days = sum(month_days[:x-1]) + y
day_of_week = ['MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT', 'SUN']
print(day_of_week[(total_days-1) % 7])
풀이
2007년은 1, 3, 5, 7, 8, 10 ,12 월은 31일까지 4, 6, 9, 11월은 30일까지. 2월은 28일까지 존재한다.
1. 리스트에 인덱스의 0번부터 1월 ~ 12월까지 존재하는 날의 값을 대입한다.
2. x가 4월인 경우. 31일 28일 31일까지 모두 더하고 y의 날짜만큼 추가로 더 한다. [:x-1] 연산은 x번 이전까지 합을 구한다는 의미이다.
3. Output으로 출력될 리스트를 작성한다.
4. 합을 구한 수에서 -1을 연산하는 이유는 [1, 1]를 입력했을 때 1월 1일은 월요일이 나오는데 리스트의 첫 시작은 0번이며, 일자에 1이 입력될 때 MON가 나오기 때문에 사전에 total_days다.
5. 1주일은 7일이므로 7로 나머지를 구하여 그 번호의 인덱스 값과 맞는 문자열 값을 출력한다.
올바르지 못한 내용이나, 궁금한 내용이 있다면 언제든지 댓글로 지식을 얘기해 주시면 감사드리겠습니다.
더 좋은 포스팅 작성해 보겠습니다.
다음 포스팅 때 뵙겠습니다.
'백준 - Python' 카테고리의 다른 글
[백준 - 10814][Python] 나이순 정렬 (0) | 2023.03.17 |
---|---|
[백준 - 2869][Python] 달팽이는 올라가고 싶다 (0) | 2023.03.16 |
[백준 - 11399][Python] ATM (0) | 2023.03.13 |
[백준 - 1439][Python] 뒤집기 (0) | 2023.03.12 |
[백준 - 11052][Python] 카드 구매하기 (0) | 2023.03.11 |