[SW Academy] 2056. 연월일 달력

DreamJJW·2023년 5월 19일
0

SW Academy

목록 보기
5/26

문제


※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

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

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

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

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

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

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

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

[입력]

입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.

다음 줄부터 각 테스트 케이스가 주어진다.

[출력]

테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)


풀이

dict을 이용하여 풀 수 있지만, D1 문제기에 가장 간단하게
모두 조건문에 넣는 방식으로 풀었다.
사전형을 이용한다면 훨씬 간결한 코드로 해결할 수 있다.

T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    a = list(input())
    # 월이 12가 넘어가는 경우
    if int(a[4] + a[5]) > 12:
        print("#{0} {1}".format(test_case, -1))
    # 월이 00인 경우
    elif a[4] == '0' and a[5] == '0':
        print("#{0} {1}".format(test_case, -1))
    # 2월인데 28일 넘어가는 경우
    elif a[5] == '2' and int(a[6] + a[7]) > 28:
        print("#{0} {1}".format(test_case, -1))
    # 일이 31이 넘어가는 경우
    elif int(a[6] + a[7]) > 31:
        print("#{0} {1}".format(test_case, -1))
    # 일이 00인 경우
    elif a[6] == '0' and a[5] == '0':
        print("#{0} {1}".format(test_case, -1))
    # 4월이 31일인 경우
    elif a[5] == '4' and int(a[6] + a[7]) > 30:
        print("#{0} {1}".format(test_case, -1))
    # 6월이 31일인 경우
    elif a[5] == '6' and int(a[6] + a[7]) > 30:
        print("#{0} {1}".format(test_case, -1))
    # 9월이 31일 경우:
    elif a[5] == '9' and int(a[6] + a[7]) > 30:
        print("#{0} {1}".format(test_case, -1))
    # 11월이 31일 경우:
    elif a[5] == '11' and int(a[6] + a[7]) > 30:
        print("#{0} {1}".format(test_case, -1))

    # 조건 만족하면 년/월/일 출력
    else:
        print("#{0} {1}/{2}/{3}".format(test_case, str(a[0])+str(a[1])+str(a[2])+str(a[3]), str(a[4]) + str(a[5]),
                                        str(a[6]) + str(a[7])))
profile
간절한 사람

0개의 댓글