[백준/파이썬] 12840번 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 12840번 문제
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
창용이는 여름을 맞이하여 ‘정창용’ 이름이 쓰인 한정판 섬머 에디션 시계를 구입했다. 왠지 오늘은 001도 가고 싶지 않고 시계를 가지고 놀고만 싶다. 우린 방에 있는 창용이가 시계를 가지고 뭘 하는지 궁금하기만 하다. 창용이는 시계의 건전지를 분리했기 때문에 시계는 시간이 흐르지 않는다.
창용이는 앞으로 시계를 돌리기도 하고 뒤로 시계를 돌리기도 한다. 입력으로는 초기 현재 시간이 주어지고 q개의 쿼리가 주어진다.
한 쿼리는 T로 시작한다. (1 ≤ T ≤ 3, 0 ≤ c ≤ 10,000,000)
-
T가 1일 때는 c를 입력으로 받아와서, 시계를 앞으로 c초 돌린다.
-
T가 2일 때는 c를 입력으로 받아와서, 시계를 뒤로 c초 돌린다.
-
T가 3일 때는 창용이가 조작한 시계의 상황을 출력한다.
입력 요약
현재 시간이 h m s 로 주어진다. (0 ≤ h ≤ 23, 0 ≤ m ≤ 59, 0 ≤ s ≤ 59)
그 다음 쿼리의 개수 q가 주어진다. (1 ≤ q ≤ 100,000)
다음 q개의 줄에는 쿼리가 주어진다. 쿼리의 형태는 위와 같다.
출력 요약
쿼리의 T가 3 일때, 창용이가 이리 저리 바꿔 놓은 시계가 가리키는 시간을
h’ m’ s’ 의 형태로 출력한다. T가 3인 쿼리는 하나는 꼭 주어진다.
코드
import sys;read=sys.stdin.readline
h,m,s=map(int,read().split())
t=h*3600+m*60+s
r=[]
for T in range(int(read())):
l=list(map(int,read().split()))
if l[0]==3:r.append(f'{h} {m} {s}')
elif l[0]==1:
t+=l[1]
t%=3600*24
h,m,s=t//3600,t%3600//60,t%60
else:
t+=24*3600-l[1]
t%=3600*24
h,m,s=t//3600,t%3600//60,t%60
if h==24:h=0
print('\n'.join(map(str,r)))
설명
핵심은 구현 관점에서 창용이는 여름을 맞이하여 ‘정창용’ 이름이 쓰인 한정판 섬머 에디션 시계를 구입했다. 왠지 오늘은 001도 가고 싶지 않고 시계를 가지고 놀고만 싶다. 우린 방에 있는 창용이가 시계를 가지고 뭘 하는지 궁금하기만 하다. …를 만족하도록 로직을 구성하는 것입니다.
코드는 입력을 파싱한 뒤 조건 분기와 계산을 순서대로 수행하고, 문제에서 요구한 형식으로 결과를 출력합니다.
경계값과 예외 케이스도 함께 고려해 오답이 나기 쉬운 상황을 방지합니다.
댓글남기기