티스토리 뷰

반응형

백준 1924번 2007년

 

알고리즘 분류: 구현

 

링크: 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중 하나를 출력한다.

 

 

문제 파악

 

2007년 1월 1일이 월요일이라는 기준으로 몇월 몇일에 무슨 요일인지를 맞추면 되는 문제이다.

 

31일 까지 있는 달은 1, 3, 5, 7, 8, 10, 12월

30일 까지 있는 달은 4, 6, 9, 11월

28일 까지 있는 달은 2월이다.

 

 

코드

# 1924번

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

big_month = [1, 3, 5, 7, 8, 10, 12]
normal_month = [4, 6, 9, 11]
small_month = [2]

day = 0
for i in range(1, x):
    if i in big_month:
        day += 31
    elif i in normal_month:
        day += 30
    elif i in small_month:
        day += 28

day += y

if day % 7 == 1:
    print("MON")
elif day % 7 == 2:
    print("TUE")
elif day % 7 == 3:
    print("WED")
elif day % 7 == 4:
    print("THU")
elif day % 7 == 5:
    print("FRI")
elif day % 7 == 6:
    print("SAT")
elif day % 7 == 0:
    print("SUN")

1월 1일이 월요일이라고 주어졌기 때문에 7로 나누었을 때 1이 남는 경우를 월요일로 한다.

 

31일이 있는달, 30일이 있는달, 28일이 있는 달을 알고 있기 때문에 주어지는 x, y값을

 

다 더해서 계산하고 7로 나누어서 나머지로 요일을 맞추는 코드이다.

 

# 1924번

import calendar

day_list = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]
x, y = map(int, input().split())

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

파이썬의 calendar 모듈을 이용해서 푸는 방법이다.

 

calendar 모듈의 weekday 메소드는 년, 월, 일을 파라미터로 받아서 요일 정보를 리턴한다.

 

월요일부터 0, 화요일 1, ... , 일요일 6이다.

 

이를 이용하면 훨씬 짧고 간결하게 코드를 작성할 수 있다.

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함