programming

Hackerrank 프로그래밍 퀴즈 time conversion 파이썬 풀이 및 해설


by Kitle · 2020. 08. 07.



해커랭크 퀴즈중 12/24시 변환 퀴즈를 풀어보겠습니다.

퀴즈 출처 : go to time-conversion problem

깃허브에서 풀이 소스 보기 : 깃허브로 이동

문제 요약 : 12 시간 AM / PM 형식의 시간이 주어지면 24 시간(밀리터리)으로 변환합니다.

참고 : 자정은 12 시간 제로 12:00:00 AM이고 24 시간 제로 00:00:00입니다. 정오는 12 시간 제로 오후 12:00:00이고 24 시간 제로 12:00:00입니다.


주어진 방식은 08:01:02AM 으로 주어지면 AM이면 08:01:02 로 표시, PM이면 20:01:02 로 출력하면 됩니다.

풀이 부터 보시겠습니다.

[풀이]

#!/bin/python3

import os
import sys


def timeConversion(s):
twelve_hour = s[:2]
if twelve_hour == '12' and s[-2:] == 'AM':
return str('00')+s[2:-2]
elif twelve_hour == '12' and s[-2:] == 'PM':
return s[:-2]
else:
if s[-2:] == 'AM':
return s[:-2]
else:
twelve_hour = s[:2]
twenty_four_hour = int(twelve_hour) + 12
return str(twenty_four_hour)+s[2:-2]


if __name__ == '__main__':
f = open(os.environ['OUTPUT_PATH'], 'w')

s = input()
result = timeConversion(s)

f.write(result + '\n')

f.close()

이번에는 해설과 솔루션을 한번에 적도록 하겠습니다.

우선 AM / PM 에 따라 분기를 쳐야 하므로 맨 뒤에 두글자를 슬라이싱 하여 AM 인지 PM 인지 체크할 수 있습니다. 간단하게 s[-2:] 를 활용하면 마지막 두 글자를 가져올 수 있겠죠.

그럼 반대로 이번에 앞에 시간만 가져오려면 어떻게 해야 할까요? 비슷합니다. s[:2] 로 시작부터 두번째(0,1) 위치까지 가져옵니다. 그러면 현재 12시 기준 시간을 알 수 있습니다.

그다음 조건에 맞게 변환이 필요한 경우, 필요 없는 경우를 나누어야 합니다. 특수한 조건이 있습니다. 이 부분 처리가 사실 가장 핵심입니다. 윗부분의 참고 부분입니다. AM 이면서 12시인 경우는 00으로 바꿔야 합니다. 바꾼후 나머지 시간을 더해줘야 합니다. 세번째 ':분:초' 까지를 합쳐야 합니다. 그냥 합치면 맨뒤에 AM, PM이 삭제가 안됩니다. 여기서는 그냥 문자열로 출력하면 되므로 str('00')+s[2:-2] 이런 모양이 되었습니다. 

 12시이면서 PM이라면 PM 만 떼고 돌려주면 됩니다.

이렇게 두가지 예외처리가 끝나고, 이제 12시 가 아니고 & AM 은 똑같이 AM만 떼고 돌려주면됩니다.

그리고 12시가 아니고 & PM 은 기존시간에 +12시간을 더하여 24시 변환하고 뒷부분 붙여서 출력하면 됩니다.

레벨이 easy였지만 프로그래밍 퀴즈로 내기 적절한 좋은 문제라고 개인적으로 생각이 됩니다. 시간 변환은 좋은 라이브러리가 있지만 각종 예외나 포멧팅 등이 많이 있어서 연습용으로 한번씩 해보면 많은 도움이 되는것 같습니다.

이상 마치겠습니다.