PS

[백준/Python] (S1) 오늘은 OS 숙제 제출일 - 2730

MSHUN 2024. 4. 20.
반응형

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}")

🧠풀이

제출일의 연도가 주어지지 않기 때문에 전후 연도를 고려해 가장 가까운 날짜를 찾아 비교한다.

해당 연도가 윤년인데 전후 연도가 윤년이 아닌 경우를 고려해야한다.

🤔느낀 점

항상 윤년이 있다는 것을 주의해야겠다.

Baekjoon Online Judge

반응형

댓글