문제 접근
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 |