나는 이렇게 학습한다/Algorithm & SQL

Human Readable Time

daco2020 2022. 2. 20. 16:09
반응형

문제 설명

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

 

이렇듯 포멧을 활용하면 값을 더 간단하게 반환할 수 있으니 알아두면 좋다.

 

 

 


 

레퍼런스

 

[python] 파이썬 format 함수 (문자열 포매팅 방법 1)

안녕하세요. BlockDMask 입니다. 파이썬에서 문자열 포매팅 방법은 %와 서식기호를 이용한 방법, format 함수를 이용한 방법, f-string을 이용한 방법 이렇게 세가지가 있다고 볼 수 있습니다. 오늘은

blockdmask.tistory.com

 

반응형

'나는 이렇게 학습한다 > 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