본문 바로가기
코딩테스트/백준 알고리즘

백준 알고리즘 | 1924 : 2007년 (Python / 파이썬)

by 함께 공부해요 2020. 11. 23.


2007년 성공분류

시간 제한

메모리 제한

제출

정답

맞은 사람

정답 비율

2 초

128 MB

69128

30716

26233

45.880%

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


문제

오늘은 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중 하나를 출력한다.

알고리즘 분류

구현


 

백준 알고리즘 # 1924번 : 2007년

day = 0
month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
week = ["SUN", "MON","TUE", "WED", "THU", "FRI", "SAT"]

x, y = map(int, input().split())

for i in range(x - 1):
    day += month[i]

day = (day + y) % 7

print(week[day])

풀이

정석대로 문제를 풀게되면 입력출력에 주어진 조건을 쭉 따라가면 되는데요.

key point 1

먼저 day를 0으로 초기화하고, month리스트로 설정해서 1월부터 12월까지 입력에서 주어진 대로 월마다의 날짜를 넣어주고, 마찬가지로 출력에 주어진 조건대로 week를 리스트로 설정하고 SUN부터 SAT까지 1주일의 각 요일을 넣어줬어요.

다음으로 입력받을 x, y 변수를 설정해서 x는 월 y는 일을 받도록 한 뒤

key point 2

for문을 통해서 range(x-1)을 설정했는데요.

1월 달은 굳이 1월의 일수인 31일을 0으로 초기화 시켜놓은 day에 더해주지 않아도

y 변수로 설정한 "일"만 가지고 요일을 알 수 있기 때문이에요!

나머지 달은 day += month[i]를 통해서 각각 달의 일수를 day에 추가해줍니다👏🏻

그리고 마지막으로 y 변수인 "일"까지 day에 더해준 뒤, 다 더한 값을 1주일인 7로 나누면!!

1주일 중, 즉 1~7 중 어떤 day인지 변수가 새로 저장이 되고

이것을 week[day]로 week 리스트의 요일을 불러주면 끄--읏!🙌🏻

이렇게 정석대로 푸는 방법 말고 파이썬에 내장되있는 함수 calender 모듈을 사용해서 푸는 방법도 있는데요.

# calender module 사용하기
import calendar
week = ["MON","TUE", "WED", "THU", "FRI", "SAT", "SUN"]

x, y = map(int, input().split())

day = calendar.weekday(2007, x, y)
print(week[day])

이 방법은 정석대로 푸는 방법을 숙지하고, 나중에 필요할 때 사용하게 된다면 유용할 것 같네요👍🏻

세한 코드가 궁금하신 분들은 아래 GitHub 코드를 참고해주세요🙏🏻

 

wook2124/Algorithm-Test

Practice algorithm. Contribute to wook2124/Algorithm-Test development by creating an account on GitHub.

github.com

최종 소스코드

댓글