programming

Hackerrank 알고리즘 퀴즈 The Time in Words 파이썬 풀이 및 해설


by Kitle · 2020. 08. 12.



Hackerrank 알고리즘 퀴즈인 The Time in Words 파이썬으로 풀고 설명해드리겠습니다.

문제 출처 : 해커랭크로이동

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


문제 요약

Given the time in numerals we may convert it into words, as shown below:


5:00 처럼 숫자가 시간이 주어졌을때 word 로 변환하는 문제입니다. 단순하게 숫자 증가만 되지 않고 여러가지 예외처리를 입맛에 맞게 해주면 되겠습니다.

솔루션
출력부분 텍스트는 숫자 -> 문자를 dict로 key value 쌍을 활용한다.
분이 00 인 경우는 정각으로 o' clock 으로 표시한다.
숫자가 1인 경우만 minute 단수 표시를 한다.
15 / 45 는 quater, 30분은 half 로 분기한다.
위에 해당하지 않고 30분 미만인 경우는 시간 + fast 처리를 한다.
20분 이상인 경우는 10분단위, 1분단위를 나눠서 표시한다.
30분이 넘어가는 경우는 분을 60분에서 빼고, 시간을 + 1 시킨다.
위에 조건도 포함한다.

풀이
#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the timeInWords function below.



def timeInWords(h, m):
dict = {
1:'one',
2:'two',
3:'three',
4:'four',
5:'five',
6:'six',
7:'seven',
8:'eight',
9:'nine',
10:'ten',
11:'eleven',
12:'twelve',
13:'thirteen',
14:'fourteen',
15:'quarter',
16:'sixteen',
17:'seventeen',
18:'eighteen',
19:'nineteen',
20:'twenty',
30:'half',
}

if m == 00:
return dict[h]+" o' clock"
elif int(m) == 1:
return dict[int(m)]+' minute past '+dict[h]
elif int(m) in (15, 30):
return dict[int(m)]+' past '+dict[h]
elif int(m) <= 20:
return dict[int(m)]+' minutes past '+dict[h]
elif 20 < int(m) < 30:
return dict[20]+' '+dict[int(m)-20]+' minutes past '+dict[h]
elif int(m) == 45:
return dict[15] + ' to ' + dict[h+1]
elif int(m) < 60:
conv_m = 60 - int(m)
if 20 < conv_m < 30:
return dict[20] + ' ' + dict[conv_m-20] + ' minutes to ' + dict[h+1]
else:
return dict[conv_m] + ' minutes to ' + dict[h+1]




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

h = int(input())

m = int(input())

result = timeInWords(h, m)

fptr.write(result + '\n')

fptr.close()


썩 좋지 못한 코드네요. 그냥 참고용으로 쓰시기만 바라겠습니다. 분명 버그가 있을겁니다 ^^;

풀고나니 그냥 dict로 다 처리해버리는 것은 어떨까 생각도 되긴 합니다. 시간관련 다양한 생각을 해볼 수 있을 것 같네요. 예제에는 없었지만, noon, midnight 등의 추가적인 처리도 사실 더 필요할 것 같네요.