일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- react
- 함수
- 알고리즘
- git pull
- 정렬
- 프로퍼티
- Algorithm
- 백준
- var
- 자바스크립트
- BOJ
- Deep Dive
- 딥다이브
- Queue
- Javascript
- solidity
- nft
- 파이썬
- Interview
- frontend
- 솔리디티
- blockchain
- Python
- let
- Execution context
- 변수
- 실행 컨텍스트
- 클로저
- 리액트
- 블록체인
Archives
- Today
- Total
공부하자
[SWEA/Python][D1] 2056. 연월일 달력 본문
< 문제 >
연월일 순으로 구성된 8자리의 날짜가 입력으로 주어진다.
해당 날짜의 유효성을 판단한 후, 날짜가 유효하다면
[그림1] 과 같이 ”YYYY/MM/DD”형식으로 출력하고,
날짜가 유효하지 않을 경우, -1 을 출력하는 프로그램을 작성하라.
연월일로 구성된 입력에서 월은 1~12 사이 값을 가져야 하며
일은 [표1] 과 같이, 1일 ~ 각각의 달에 해당하는 날짜까지의 값을 가질 수 있다.
※ 2월의 경우, 28일인 경우만 고려한다. (윤년은 고려하지 않는다.)
[입력]
입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.
다음 줄부터 각 테스트 케이스가 주어진다.
[출력]
테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
<나의 풀이>
T = int(input())
for tc in range(1, T + 1):
data = input()
Y = data[0:4]
M = data[4:6]
D = data[6:8]
if (int(M) in [1, 3, 5, 7, 8, 10, 12]) and (0 <int(D)<32):
ans = str(Y) + '/' + str(M) + '/' + str(D)
elif (int(M) in [4, 6, 9, 11]) and (0<int(D)<31):
ans = str(Y) + '/' + str(M) + '/' + str(D)
elif int(M) == 2 and (0<int(D)<29):
ans = str(Y) + '/' + str(M) + '/' + str(D)
else:
ans = '-1'
print('#{} {}'.format(tc, ans))
<REVIEW>
사실 이 문제는 어떻게 간결하게 푸냐가 관건인거 같다. 사실 문제는 쉬운데 간결하게 풀려고 하다보니 시간이 좀 걸렸던 문제였다. 처음에는 그냥 일단 적어보고 줄일 수 있는 방법을 생각하자 싶어, M == '4' or M == '6' ... 이런식으로 적었었는데 너무 코드가 쓸데없이 길어져 책이나 검색을 통해 위와 같은 방법을 찾았다. 저런 식으로 int(M) in [4, 6, 9, 11]에서 in을 써 중복없이 한번에 조건문을 설정 가능하다는 것을 배웠다.
<출처>
'Algorithm > SWEA' 카테고리의 다른 글
[SWEA/Python][D2] 1926. 간단한 369게임 (0) | 2021.09.08 |
---|---|
[SWEA/Python][D2]1859. 백만장자 프로젝트 (0) | 2021.09.07 |
Comments