[SWEA 2056] 연월일 달력

업데이트:

🦥 연월일 달력

문제

연월일 순으로 구성된 8자리의 날짜가 입력으로 주어진다.

그림 1

해당 날짜의 유효성을 판단한 후, 날짜가 유효하다면

[그림1] 과 같이 ”YYYY/MM/DD”형식으로 출력하고,

날짜가 유효하지 않을 경우, -1 을 출력하는 프로그램을 작성하라.

표 1

연월일로 구성된 입력에서 월은 1~12 사이 값을 가져야 하며

일은 [표1] 과 같이, 1일 ~ 각각의 달에 해당하는 날짜까지의 값을 가질 수 있다.

※ 2월의 경우, 28일인 경우만 고려한다. (윤년은 고려하지 않는다.)

출처 : 문제 링크

입력/출력

  • 입력
    • 입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.
    • 다음 줄부터 각 테스트 케이스가 주어진다.
  • 출력
    • 테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.
    • (t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
  • 입출력 예제 입출력 예제

풀이

🔎 아이디어

  • 딕셔너리 활용
  • 문자열 슬라이싱
  • ※ 리스트 → int() 변환 못함

🔎 코드

# 연월일 달력
x = int(input())
result_list = []

# 월-일 딕셔너리
a = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}

for i in range(x):
    # 문자열 입력 받기
    data = input()

    year = data[0:4]
    month = data[4:6]
    day = data[6:8]

    # 달력 범위 안
    if 0 < int(year) and 0 < int(month) < 13 and 0 < int(day) <= a[int(month)]:
        result = year + '/' + month + '/' + day
        result_list.append(result)
    # 달력 범위 밖
    else:
        result_list.append(-1)

for k in range(len(result_list)):
    print(f'#{k+1}', result_list[k])

댓글남기기