전체적인 흐름을 간단히 얘기하자면, h m s
형태의 시간을 n초
형태로 변환하여 계산한 뒤 출력할 때는 다시 h m s
형태로 바꾸어 출력한다.
1, 2번은 T c
형태로, 3번은 T
형태로 입력이 들어온다.
즉 입력이 한 번에 2개가 들어올지 한 개가 들어올지 알 수 없으므로, 입력은 리스트
로 받는다.
# 입력
h, m, s = map(int, sys.stdin.readline().split())
seconds = s + m * 60 + h * 3600 # h m s 형태를 n초 형태로 변환하여 seconds에 저장
q = int(sys.stdin.readline())
for _ in range(q):
# 입력의 개수가 2개 또는 1개이므로 리스트로 받는다.
T = list(map(int, sys.stdin.readline().split()))
# 시계 조작
if T[0] == 1:
seconds += T[1]
elif T[0] == 2:
seconds -= T[1]
else:
to_hms(seconds)
출력시 to_hms(sec)
함수를 통해 n초
형식을 h m s
형식으로 변환하여 출력한다.
그런데 먼저 주의해야 할 것은, n초
가 시계의 범위를 넘어설 수 있다.
만약 -12359초
라면, 시간에는 음수가 없으니 그대로 출력할 수 없다. 따라서 모듈러 연산이 필요하다.
24시간을 초로 환산한 24 * 3600
으로 모듈러 연산을 하면 시계의 범위 안으로 나타낼 수 있다.
특히나 파이썬의 경우 -1 % 24 = 23
과 같이 연산이 되기 때문에 양수 음수에 상관없이 다음의 코드 한줄로 처리가 가능하다.
# 시계의 범위를 넘어서지 않도록 모듈러 연산을 한다.
sec %= (24 * 3600)
h m s
형태로 바꾸는 것 역시 모듈러 연산을 사용하여 구현할 수 있다.
h = sec // 3600
sec %= 3600
m = sec // 60
sec %= 60
s = sec
import sys
# 함수
def to_hms(sec):
# 시계의 범위를 넘어서지 않도록 모듈러 연산을 한다.
sec %= (24 * 3600)
h = sec // 3600
sec %= 3600
m = sec // 60
sec %= 60
s = sec
print(h, m, s)
# 입력
h, m, s = map(int, sys.stdin.readline().split())
seconds = s + m * 60 + h * 3600 # h m s 형태를 n초 형태로 변환하여 seconds에 저장
q = int(sys.stdin.readline())
for _ in range(q):
# 입력의 개수가 2개 또는 1개이므로 리스트로 받는다.
T = list(map(int, sys.stdin.readline().split()))
# 시계 조작
if T[0] == 1:
seconds += T[1]
elif T[0] == 2:
seconds -= T[1]
else:
to_hms(seconds)