반응형
밑의 링크는 CodeUp에서의 문제 링크입니다.
문제는 링크를 통해서 직접 봐주시길 바랍니다.
주의해야 할 점
이 문제에서 사용한 map을 사용하는 입력 방식은 정말 많이 사용하는 입력 방식입니다.
이해하고 거의 외운 것 마냥 써봅시다.
입력하는 시의 범위가 0 ~ 23인 것을 보면 24시간을 기준으로 하는 시간 단위인 것 같습니다.
시간 관련 알고리즘 문제를 풀 때는 시, 분, 초 중
문제에서 고려하는 가장 작은 단위로 시간을 합산하고 문제에 맞게 처리한 뒤,
다시 시, 분, 초로 표현하는 방법이 제일 깔끔한 것 같습니다.
이 기법은 후기를 작성한 밑의 포스팅 링크에서 설명하고 있는
'그림으로 배우는 알고리즘 Algorithm Basic'이라는 책에서 처음 배웠습니다.
생각한 풀이 과정
- readline을 사용하기 위해 import 합니다.
- 0 ~ 23인 시와 0 ~ 59인 분을 공백으로 구분해 입력합니다. 각각 정수형으로 변환하고, 변수 hour, minute에 넣어줍니다.
- 입력한 시에 60을 곱하고 입력한 분에 더해 분 단위로 시간을 맞춘 뒤 변수 time_sum에 저장합니다.
- 변수 time_sum의 값에 30을 빼 30분 전의 시간을 구하고 변수 before_30_time에 저장합니다.
- 변수 before_30_time의 값에 60을 나눈 후의 몫인 30분 전 시간의 '시' 부분을 구하고 변수 before_30_hour에 저장합니다.
- 변수 before_30_time의 값에 60을 나눈 후의 나머지인 30분 전 시간의 '분' 부분을 구하고 변수 before_30_minute에 저장합니다.
- 30분 전 시간의 시가 음수라면, before_30_hour의 값에 24를 더해 24시간 기준의 시로 맞춰줍니다.
- 30분 전의 시간의 시와 분인 before_30_hour, before_30_minute의 값을 공백으로 구분해 출력합니다.
제출한 파이썬 코드
# readline을 사용하기 위해 import합니다.
from sys import stdin
# 시와 분을 공백으로 구분해 입력합니다.
# 시의 범위 : 0 ~ 23
# 분의 범위 : 0 ~ 59
# 각각 정수형으로 변환합니다.
hour, minute = map(int, stdin.readline().split())
# 입력한 시에 60을 곱하고 분에 더해 분 단위의 시간으로 변경하고 변수에 저장합니다.
time_sum = hour * 60 + minute
# 분 단위 시간에서 30분을 빼서 30분전의 시간을 구하고 변수에 저장합니다.
before_30_time = time_sum - 30
# 30분전의 시간에 60을 나눈 후의 몫인 30분전 시간의 시 부분을 구하고 변수에 저장합니다.
before_30_hour = before_30_time // 60
# 30분전의 시간에 60을 나눈 후의 나머지인 30분전 시간의 분 부분을 구하고 변수에 저장합니다.
before_30_minute = before_30_time % 60
# 30분전 시간의 시가 음수라면
if before_30_hour < 0:
# 음수인 시 부분에 24를 더해 24시간 기준으로 맞춰줍니다.
before_30_hour += 24
# 30분 전의 시간의 시와 분을 공백으로 구분해 출력합니다.
print(before_30_hour, before_30_minute)
제출 결과
※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.
※ 더 효율적이고 빠른 정답을 환영합니다.
※ 공감 버튼❤과 구독 버튼도 잊지 말고 꾹 눌러주시면 감사하겠습니다~👍👍
반응형
댓글