Coding Test/SWEA

SWEA 문제 2056. 연월일 달력

정도윤 2024. 5. 16. 03:57

문제 접근

 

1.date를 입력받고 연도수는 상관이없겠다 생각하고 월과 일에 대한 검증을 해야겠다고 생각

2.date를 str으로 받기때문에 str으로 검증을 진행하는데 너무 번거롭다고 느낌

3.max_day가 31일,30일,28일인 달을 나누고 2중 if문으로 일수가 day list에 들어가는지 검증

4.노가다

 

T = int(input())

month_31= ['01','03','05','08','10','12']
month_30=['04','06','07','09','11']
month_28='02'
day_31 = ['01','02','03','04','05','06','07','08','09','10',
       '11','12','13','14','15','16','17','18','19','20',
       '21','22','23','24','25','26','27','28','29','30','31']
day_30 = ['01','02','03','04','05','06','07','08','09','10',
       '11','12','13','14','15','16','17','18','19','20',
       '21','22','23','24','25','26','27','28','29','30']
day_28 = ['01','02','03','04','05','06','07','08','09','10',
       '11','12','13','14','15','16','17','18','19','20',
       '21','22','23','24','25','26','27','28']

for test_case in range(1, T + 1):

    date = input()

    input_year = date[0:4]
    input_month = date[4:6]
    input_day = date[6:]
    invalid_date = '-1'

    if input_month in month_31: #2022/1015
        if input_day in day_31:
            print(f'#{test_case} {input_year}/{input_month}/{input_day}')
        else:
            print(f'#{test_case} {invalid_date}')
    elif input_month in month_30:
        if input_day in day_30:
            print(f'#{test_case} {input_year}/{input_month}/{input_day}')
        else:
            print(f'#{test_case} {invalid_date}')
    elif input_month in month_28:
        if input_day in day_28:
            print(f'#{test_case} {input_year}/{input_month}/{input_day}')
        else:
            print(f'#{test_case} {invalid_date}')
    else:
        print(f'#{test_case} {invalid_date}')

 

답은 나왔지만 절대 맞는풀이라고 생각이 안듦=>str형태로 input() 받은걸 int로 변환해서 조건문만들기

 

def is_valid_date(year, month, day):
    # 각 월별 최대 일수를 딕셔너리로 정의
    max_days = {
        1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30,
        7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31
    }

    # 월과 일이 유효한 범위에 있는지 확인
    if month < 1 or month > 12 or day < 1 or day > max_days[month]:
        return False
    else:
        return True

T = int(input())  # 테스트 케이스의 개수 입력

for t in range(1, T + 1):
    date = input()  # 연월일을 입력 받음
    year = int(date[:4])  # 연도 추출
    month = int(date[4:6])  # 월 추출
    day = int(date[6:])  # 일 추출

    # 날짜의 유효성 검사
    if is_valid_date(year, month, day):
        print(f"#{t} {year:04d}/{month:02d}/{day:02d}")
    else:
        print(f"#{t} -1")

 

 

오답노트

1.숫자인 date를 input() 받고 str이 아닌 int형태로 변환한뒤에 사용하면 좀더 쉽게 비교가능하겠다는 생각하기

2.max_day를 딕셔너리 형태로 정의해서 월을 키(key)로 일을 값(value)로 해서 유효범위를 판단할때

훨씬 간단하게 사용가능

3.f-string을 통해 출력할때 이런방법도 가능하다.

{year:04d}: 연도를 출력하는데, 04d는 네 자리의 정수로 출력하고, 앞에 부족한 자리는 0으로 채우도록 지정

 

'Coding Test > SWEA' 카테고리의 다른 글

SWEA 1288.새로운 불면증 치료법  (0) 2024.05.17
SWEA 1945.간단한 소인수분해  (0) 2024.05.17
SWAE 문제 1954.달팽이 숫자  (0) 2024.05.16