반응형
문제 설명
Write a function, which takes a non-negative integer (seconds) as input and returns the time in a human-readable format (HH:MM:SS)
- HH = hours, padded to 2 digits, range: 00 - 99
- MM = minutes, padded to 2 digits, range: 00 - 59
- SS = seconds, padded to 2 digits, range: 00 - 59
The maximum time never exceeds 359999 (99:59:59)
You can find some examples in the test fixtures.
해결 방법
1. seconds를 이용해 시, 분, 초를 계산한다.
2. '00:00:00'형태에 맞추어 반환한다.
def make_readable(seconds):
hour = seconds // 3600
minute = seconds // 60 - hour * 60
seconds = seconds - hour * 3600 - minute * 60
return ':'.join(['0' + str(i) if len(str(i)) == 1 else str(i) for i in (hour,minute,seconds)])
처음에는 내장함수로 풀려고 했는데 이번에는 직접 계산하는게 도움이 될 것 같았다.
수학 계산으로 초를 시, 분, 초 단위로 만들었고 반환 값은 컴프리 핸션으로 자릿수를 확인하여 만약 한 자리라면 '0'을 덧붙여 클라이언트가 원하는 형태로 값을 반환하였다.
이를 포맷을 이용해 푼다면 다음과 같다.
def make_readable(s):
return '{:02}:{:02}:{:02}'.format(s / 3600, s / 60 % 60, s % 60)
훨씬 더 간결하게 풀 수 있다.
format 에 대해서 좀 살펴보자면 다음과 같다.
# {인덱스:자리수}를 의미한다.
# 여기서는 인덱스 1인 5가 두자리 수로 출력된 것을 볼 수 있다.
>>> print('{1:02}'.format(10,5))
05
# 여기서는 인덱스 0인 10이 두자리 수로 출력된 것을 볼 수 있다.
>>> print('{0:02}'.format(10,5))
10
# 인덱스가 지정되어 있지않으면 순서대로 받는다.
# 여기서는 인덱스 0인 10이 세자리 수로 출력된 것을 볼 수 있다.
>>> print('{:03}'.format(10,5))
010
# 여기서는 인덱스 0인 10이 좌측정렬(<), 세자리 수로 출력된 것을 볼 수 있다.
>>> print('{:<03}'.format(10,5))
100
이렇듯 포멧을 활용하면 값을 더 간단하게 반환할 수 있으니 알아두면 좋다.
레퍼런스
반응형
'나는 이렇게 학습한다 > Algorithm & SQL' 카테고리의 다른 글
The Hashtag Generator (0) | 2022.02.22 |
---|---|
Count characters in your string (0) | 2022.02.21 |
Where my anagrams at? (0) | 2022.02.19 |
Write Number in Expanded Form (0) | 2022.02.18 |
Split String (0) | 2022.02.17 |