백준 1924 파이썬

로선생·2022년 1월 23일
0

코테준비

목록 보기
17/19

문제는 여기서 확인
-> https://www.acmicpc.net/problem/1924

처음 풀이를 막 작성하다가

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

# n월의 마지막이 무슨 요일인지
# 그 요일+1요일에 따라 해당 월의 요일이 결정된다

if x == 1 or x == 10:
  if y%7 == 1:
    print("MON")
  elif y%7 == 2:
    print("TUE")
  elif y%7 == 3:
    print("WED")
  elif y%7 == 4:
    print("THU")
  elif y%7 == 5:
    print("FRI")
  elif y%7 == 6:
    print("SAT")
  elif y%7 == 0:
    print("SUN")
# 1월 31일은 수요일, 2월 1일은 목요일
# 2월 28일은 수요일, 3월 1일은 목요일
elif x == 2 or x == 3 or x == 11:
  if y%7 == 1:
    print("THU")
  elif y%7 == 2:
    print("FRI")
  elif y%7 == 3:
    print("SAT")
  elif y%7 == 4:
    print("SUN")
  elif y%7 == 5:
    print("MON")
  elif y%7 == 6:
    print("TUE")
  elif y%7 == 0:
    print("WED")
# 3월 31일은 토요일, 4월 1일은 일요일
elif x == 4 or x == 7:
  if y%7 == 1:
    print("SUN")
  elif y%7 == 2:
    print("MON")
  elif y%7 == 3:
    print("TUE")
  elif y%7 == 4:
    print("WED")
  elif y%7 == 5:
    print("THU")
  elif y%7 == 6:
    print("FRI")
  elif y%7 == 0:
    print("SAT")
# 4월 30일은 월요일, 5월 1일은 화요일
elif x == 5:
  if y%7 == 1:
    print("TUE")
  elif y%7 == 2:
    print("WED")
  elif y%7 == 3:
    print("THU")
  elif y%7 == 4:
    print("FRI")
  elif y%7 == 5:
    print("SAT")
  elif y%7 == 6:
    print("SUN")
  elif y%7 == 0:
    print("MON")
# 5월 31일은 목요일, 6월 1일은 금요일
elif x == 6:
  if y%7 == 1:
    print("FRI")
  elif y%7 == 2:
    print("SAT")
  elif y%7 == 3:
    print("SUN")
  elif y%7 == 4:
    print("MON")
  elif y%7 == 5:
    print("TUE")
  elif y%7 == 6:
    print("WED")
  elif y%7 == 0:
    print("THU")
# 6월 30일은 토요일, 7월 1일은 일요일
# 7월 31일은 화요일, 8월 1일은 수요일
elif x == 8:
  if y%7 == 1:
    print("WED")
  elif y%7 == 2:
    print("THU")
  elif y%7 == 3:
    print("FRI")
  elif y%7 == 4:
    print("SAT")
  elif y%7 == 5:
    print("SUN")
  elif y%7 == 6:
    print("MON")
  elif y%7 == 0:
    print("TUE")
# 8월 31일은 금요일, 9월 1일은 토요일
elif x == 9 or x == 12:
  if y%7 == 1:
    print("SAT")
  elif y%7 == 2:
    print("SUN")
  elif y%7 == 3:
    print("MON")
  elif y%7 == 4:
    print("TUE")
  elif y%7 == 5:
    print("WED")
  elif y%7 == 6:
    print("THU")
  elif y%7 == 0:
    print("FRI")
# 9월 30일은 일요일, 10월 1일은 월요일
# 10월 31일은 수요일, 11월 1일은 목요일
# 11월 30일은 금요일, 12월 1일은 토요일

중복되는 부분이 많았다.
답은 맞았지만 어떻게 효율화할까 고민하다가,
규칙을 찾아보았다.

핵심은 누적되는 date값을 구해 y와 더한 뒤 %7해주면 되는 것이었다.

아래는 리팩토링한 풀이다.

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

# 누적되는 date에 %7하기

Day = 0
month_list = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
week_list = ["SUN", "MON","TUE", "WED", "THU", "FRI", "SAT"]

for i in range(x-1):
  Day += month_list[i]
Day = (Day+y)%7

print(week_list[Day])
profile
이제는 이것저것 먹어요

0개의 댓글

관련 채용 정보