[백준] 1308_D-day python
D-Day
문제
캠프에 오게 된 송유진은 캠프가 너무 지루해서 오늘로부터 캠프가 끝날 때 까지 며칠이나 남았는지 알아보고 싶었다. 그런데 캠프는 비상식적으로 길지도 몰라서 (윤년을 포함할지도 모른다) 손으로 하나하나 세기에는 힘들어 보였다.
더욱 정확한 계산을 위해, 유진이는 윤년이 정해지는 기준을 찾아보았고, 그것은 다음과 같았다.
- 서력기원 연수가 4로 나누어떨어지는 해는 우선 윤년으로 한다. (2004년, 2008년, …)
- 100으로 나누어떨어지는 해는 평년으로 한다. (2100년, 2200년, …)
- 400으로 나누어떨어지는 해는 다시 윤년으로 한다. (1600년, 2000년, …)
그런데 캠프가 너무 길 경우, 사춘기인 유진이는 캠프에 무단으로 빠질지도 모른다.
입력
첫째 줄에 오늘의 날짜가 주어지고, 두 번째 줄에 D-Day인 날의 날짜가 주어진다. 날짜는 연도, 월, 일순으로 주어지며, 공백으로 구분한다. 입력 범위는 1년 1월 1일부터 9999년 12월 31일 까지 이다. 오늘의 날짜는 항상 D-Day보다 앞에 있다.
출력
오늘부터 D-Day까지 x일이 남았다면, "D-"를 출력하고 그 뒤에 공백 없이 x를 출력한다. 만약 캠프가 천년 이상 지속된다면 (오늘이 y년 m월 d일이고, D-Day가 y+1000년 m월 d일과 같거나 늦다면) 대신 "gg"를 출력한다. 오늘이 2월 29일인 경우는 주어지지 않는다.
해결방법
- python의 dateteime 모듈을 이용해서 연월일을 연산하면 일자의 차이를 구할 수 있다.
- 예를 들어, 숫자가 2008 12 27, 2009 1 22이면 이를 뺄 때
26 days, 0:00:00이 출력된다.
- 예를 들어, 숫자가 2008 12 27, 2009 1 22이면 이를 뺄 때
- 그 중에서 일이 나와잇는 것은 첫번째 요소이기 때문에 이를 문자로 변환하고 split으로 나눠준다.
- 그 후에 첫번째 인자를 취하고 숫자로 변경한다.
- 반복문을 통해 윤년과 평년을 처리해준다.
y1,m1,d1 = map(int,input().split())
y2,m2,d2 = map(int,input().split())
# def yoon(year) :
# return year//4-year//10+year//400
# def mon(year,month) :
# if month == 0 :
# return 0
# result = 0
# for i in range(1,month+1) :
# if i in [1,3,5,7,8,10,12] :
# result += 31
# elif i in [4,6,9,11] :
# result += 30
# elif i == 2 :
# if year//400 == 0:
# result += 29
# elif year//100 ==0 :
# result += 28
# elif year//4 ==0 :
# result += 29
# else :
# result += 28
# return result
# Day1 = (y1-1)*365+yoon(y1-1) + mon(y1,m1-1) + d1
# Day2 = (y2-1)*365+yoon(y2-1) + mon(y2,m2-1) + d2
# if y2-y1>1000 :
# print('gg')
# exit()
# elif y2-y1==1000 and m2>m1 :
# print('gg')
# exit()
# elif y2-y1==1000 and m1==m2 and d2>=d1 :
# print('gg')
# exit()
# else :
# print(f'D-{Day2-Day1}')
import datetime
print(str(datetime.date(y2,m2,d2)-datetime.date(y1,m1,d1)))
d_day = int(str(datetime.date(y2,m2,d2)-datetime.date(y1,m1,d1)).split()[0])
over = 0
for i in range(0,1000) :
if i%400==0 :
over +=366
elif i%100==0 :
over += 365
elif i%4==0 :
over += 366
else :
over += 365
if d_day >= over :
print('gg')
else :
print(f'D-{d_day}')
Author And Source
이 문제에 관하여([백준] 1308_D-day python), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@holawan/백준-1308D-day-python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)