본문 바로가기

알고리즘/백준 문제 풀이

[Python] 1308번 D-Day

728x90

https://www.acmicpc.net/problem/1308

 

1308번: D-Day

첫째 줄에 오늘의 날짜가 주어지고, 두 번째 줄에 D-Day인 날의 날짜가 주어진다. 날짜는 연도, 월, 일순으로 주어지며, 공백으로 구분한다. 입력 범위는 1년 1월 1일부터 9999년 12월 31일 까지 이다.

www.acmicpc.net


 

22/09/16

 

 

간단한 구현 문제로, 프로그래밍 기초를 배우면 자주 접하는 윤년 판단 문제가 응용된 문제이다.


 

문제 접근 방식:

 

 

파이썬의 datetime모듈을 사용하여 구현하였다.

 

1000년을 넘어가면 'gg'를 출력해야 하므로 그 부분은 따로 처리를 먼저 해주었고, 나는 윤년 처리가 귀찮았기 때문에 datetime의 toordinal 메서드를 활용하였다.

 

이 메서드는 1년 1월 1일부터 입력된 date까지 누적된 날짜를 반환해주는 메서드인데, 이를 이용해 누적된 날짜의 차를 계산하면 그것이 바로 D-day날짜인 것이다.

 

윤년 판단을 따로 하지 않아도 굉장히 편하게 구할 수 있어서 유용한 함수라고 할 수 있겠다.


아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.

더보기
# 1308번 D-Day
from datetime import *
today = tuple(map(int, input().split()))
dday = tuple(map(int, input().split()))
if today[0] + 1000 < dday[0]:
    print('gg')
elif today[0] + 1000 == dday[0] and (today[1], today[2]) <= (dday[1], dday[2]):
    print('gg')
else:
    today = date(*today)
    dday = date(*dday)
    print(f'D-{dday.toordinal() - today.toordinal()}')