반응형
Baekjoon Online Judge의 2730번 오늘은 OS 숙제 제출일 문제의 Python 풀이입니다.
2730번: 오늘은 OS 숙제 제출일
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 둘째 줄부터 T개의 줄에는 각 테스트 케이스의 정보가 주어진다. 테스트 케이스의 정보는 날짜 2개로 이루어져 있다. 첫 번째 날짜는 숙제 마감일
www.acmicpc.net
💻코드
from datetime import datetime, timedelta
T = int(input())
for _ in range(T):
a, b = input().split()
deadline_month, deadline_day, deadline_year = map(int, a.split('/'))
submit_month, submit_day = map(int, b.split('/'))
deadline_date = datetime(deadline_year, deadline_month, deadline_day)
# 제출일에 대해 같은 연도, 이전 연도, 다음 연도 고려
submit_date_same_year = datetime(deadline_year, submit_month, submit_day)
# 윤년 등의 이유로 문제 발생 시 예외처리
try:
submit_date_previous_year = datetime(deadline_year - 1, submit_month, submit_day)
except ValueError:
submit_date_previous_year = submit_date_same_year
try:
submit_date_next_year = datetime(deadline_year + 1, submit_month, submit_day)
except ValueError:
submit_date_next_year = submit_date_same_year
# 각 날짜별 일수 차이 계산
days_difference_options = [
(submit_date_same_year - deadline_date).days,
(submit_date_previous_year - deadline_date).days,
(submit_date_next_year - deadline_date).days
]
# 최소 일수 차이를 계산하고 해당 일수 차이에 해당하는 날짜 선택
minimum_difference = min(abs(day) for day in days_difference_options)
final_day_difference = next(day for day in days_difference_options if abs(day) == minimum_difference)
final_comparison_date = deadline_date + timedelta(days=final_day_difference)
# 출력 형식에 맞게 결과 출력
if final_day_difference == 0:
print("SAME DAY")
elif minimum_difference > 7:
print("OUT OF RANGE")
else:
s = "S" if minimum_difference != 1 else ""
ap = "AFTER" if final_day_difference > 0 else "PRIOR"
print(f"{final_comparison_date.month}/{final_comparison_date.day}/{final_comparison_date.year} IS {minimum_difference} DAY{s} {ap}")
🧠풀이
제출일의 연도가 주어지지 않기 때문에 전후 연도를 고려해 가장 가까운 날짜를 찾아 비교한다.
해당 연도가 윤년인데 전후 연도가 윤년이 아닌 경우를 고려해야한다.
🤔느낀 점
항상 윤년이 있다는 것을 주의해야겠다.

반응형
댓글