• TOC {:toc}

이 글은 백준 온라인 저지의 1924번 문제를 파이썬(Python)으로 풀이한 것을 모아놓은 글입니다.

일종의 연습 기록이며 제가 정답을 받은 코드와 참고할만한 다른 코드를 같이 기록합니다. 필요한 경우 코드에 대한 해설을 기록합니다만 코드는 통과했어도 해설은 틀릴 수 있기 때문에 가볍게 참고해주시길 부탁드립니다. 피드백은 편하신 방법으로 자유롭게 주시면 감사하겠습니다.

2021.04.14

메모리 시간 코드 길이
34624 KB 92 ms 186 B
from datetime import date
DAY = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"]

x, y = map(int, input().split())
f = date(2007, x, y)
p = date(2007, 1, 1)
print(DAY[(f - p).days % 7])

아이디어 & 풀이

datetime 라이브러리의 date를 이용해 기준과 주어진 날짜를 변환해 일 수 차이를 계산한다.

일 수 차이를 7로 나눈 나머지에 따라 요일을 출력한다.

  • 기준이 MON이기 때문에 MON으로 시작되는 요일 리스트를 만들면 나머지를 인덱스로 넣었을 때 알맞은 값이 출력된다.

참고 답안

# 풀이 1-1
DAY = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']

x, y = map(int, input().split())
# 현재일 수에 
# 각 월에 따른 일 수를 입력된 월까지 더한다.
for i in range(1, x):
    if i in [1, 3, 5, 7, 8, 10, 12]:
        y += 31
    elif i == 2:
        y += 28
    else:
        y += 30

# 총 경과일을 7로 나눈 나머지를 인덱스로 사용한다.
print(DAY[y % 7])

# 풀이 1-2
DAY = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]
# 월별일 수를 리스트로 구성한 뒤
MONTH = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

a, b = map(int, input().split())
# 입력된 월 까지 리스트를 잘라 리스트 원소의 합을 더해 경과일을 구한다.
print(DAY[(sum(MONTH[0:a]) + b) % 7])

# 풀이 1-3
DAY = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"]
# 각 월까지 지났을 때 요일이 이동하는 만큼을 리스트로 구성한다.
# e.g, 2월 1일은 목요일이다.
SHIFT = [0, 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5]

a, b = map(int, input().split())
print(DAY[(b + SHIFT[a]) % 7])

아이디어 & 풀이

입력받은 일수와 월에 따른 경과 일을 더해서 계산한다.

  • 입력한 일 수도 더하기 때문에 경과 일을 계산한 값은 날짜 차이보다 1만큼 큰 값을 갖는다.
    • e.g., 1월 1일까지의 경과일을 구하면 0이 아니라 1이다.
  • 그러므로 요일 리스트 구성을 MON이 인덱스가 1인 위치에 오도록 했다.