SWEA

[SWEA][python] 2056 연월일 달력

winter17 2023. 2. 22. 00:02

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 출력

 


리뷰

파이썬 처음 배우고 이 문제를 접했을 때 어떻게 풀어야 할지 감도 못 잡아서 넘긴 문제였는데

더 이상 피할 수 없어서 풀지 못한 문제를 다시 하나씩 풀어가는 와중에 이 문제를 다시 보게 되었다

이 문제 풀이 방법은 딕셔너리, 리스트 두 가지가 있을 것 같은데 리스트를 다루는 게 좀 더 익숙해서 리스트로 접근을 했다