[SWEA][python] 2056 연월일 달력
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5QLkdKAz4DFAUq
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이 과정
days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
T = int(input())
for t in range(1, T + 1):
cal = list(input())
year = cal[0] + cal[1] + cal[2] + cal[3]
month = cal[4] + cal[5]
day = cal[-2] + cal[-1]
if 0 < int(month) <= 12:
if int(day) <= end[int(month)-1]:
print(f'#{t} {year.zfill(2)}/{month.zfill(2)}/{day.zfill(2)}')
else:
print(f'#{t} -1')
else:
print(f'#{t} -1')
[문제 이해] 22220228 8자리 입력이 주어졌을 때 2222/02/28과 같은 형태로 출력하는데 각 월의 일수를 맞춰서 출력해야 한다
예를 들어 2월은 28까지 밖에 없는데 30이 입력으로 주어졌다면 -1을 출력하는 문제이다
[문제 풀이]
1. 각 월의 마지막 일을 리스트에 담고 시작 (days)
2. 테스트 케이스를 입력 받고 for문을 돌려서 8자리 날짜를 입력 list로 입력받는다
3. 년, 월, 일 별로 자리 수를 나눠서 string 타입으로 더하고 각자 변수에 저장한다
4. if조건문을 통해 유효성을 판단하는데 month변수는 string 타입이니까 int 타입으로 변환시킨 후 0 초과 12 이하인지 확인하고
5. 4번 조건이 True면 month변수에 -1 한 값을 end리스트에서 수를 찾아서 day의 수가 적다면 문제에서 요구하는 대로 출력하는데
출력형식을 맞춰줘야 하니까 zfill() 함수를 사용해서 숫자의 자릿수를 맞춰줘야 한다
6. 4번 조건이 False라면 -1 출력
7. 5번 조건이 False라면 -1 출력
리뷰
파이썬 처음 배우고 이 문제를 접했을 때 어떻게 풀어야 할지 감도 못 잡아서 넘긴 문제였는데
더 이상 피할 수 없어서 풀지 못한 문제를 다시 하나씩 풀어가는 와중에 이 문제를 다시 보게 되었다
이 문제 풀이 방법은 딕셔너리, 리스트 두 가지가 있을 것 같은데 리스트를 다루는 게 좀 더 익숙해서 리스트로 접근을 했다