728x90
반응형
✅ 문제
https://www.acmicpc.net/problem/1308
문제
캠프에 오게 된 송유진은 캠프가 너무 지루해서 오늘로부터 캠프가 끝날 때 까지 며칠이나 남았는지 알아보고 싶었다. 그런데 캠프는 비상식적으로 길지도 몰라서 (윤년을 포함할지도 모른다) 손으로 하나하나 세기에는 힘들어 보였다.
더욱 정확한 계산을 위해, 유진이는 윤년이 정해지는 기준을 찾아보았고, 그것은 다음과 같았다.
- 서력기원 연수가 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일인 경우는 주어지지 않는다.
✅ 제출 답안
import datetime as dt
today = list(map(int, input().split()))
d_day = list(map(int, input().split()))
if today[0] + 1000 < d_day[0]:
print("gg")
elif today[0] + 1000 == d_day[0] and (today[1], today[2]) <= (d_day[1], d_day[2]):
print("gg")
else:
today = dt.date(*today)
d_day = dt.date(*d_day)
print("D-"+str(d_day.toordinal() - today.toordinal()))
✅ 해설 및 풀이과정
- python의 dateteime 모듈을 이용해서 연월일을 연산하면 일자의 차이를 구할 수 있다.
- 윤년을 계산하는 함수는 toordinal() 이다.
- * 부호는 파이썬에서 "unpacking" 연산자라고 부르며, 리스트나 튜플 등의 시퀀스를 함수에 전달할 때 유용하다. 이를 통해 시퀀스의 각 요소를 개별 인자로 변환하여 함수에 전달할 수 있다.
- today와 d_day는 각각 [연도, 월, 일] 형식의 리스트이다. dt.date 클래스의 생성자는 세 개의 인자(연도, 월, 일)를 필요로 하므로, 리스트의 각 요소를 별도의 인자로 전달하기 위해 * 연산자를 사용한다. 이렇게 하면 리스트의 각 요소가 개별 인자로 분리되어 함수에 전달된다.
# 둘은 같은 의미
today = dt.date(*today)
dt.date(today[0], today[1], today[2])
728x90
반응형
'Study > Coding Test' 카테고리의 다른 글
[BaekJoon] 1343. 폴리오미노 (0) | 2024.07.04 |
---|---|
[BaekJoon] 1340. 연도 진행바 (0) | 2024.07.04 |
[BaekJoon] 1316. 그룹 단어 체커 (1) | 2024.06.11 |
[BaekJoon] 1085. 직사각형에서 탈출 (0) | 2024.05.17 |
[BaekJoon] 1259. 팰린드롬수 (0) | 2024.05.17 |