Human Readable Time, CodeWars Kata

사진: 코드워즈

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.

0 또는 양의 정수를 입력받아 사람이 읽기 편한 시간 형태로 출력하는 문제입니다. 99:59:59를 초과하는 값은 친절하게 들어오지 않습니다.

 

My Solution

저는 시, 분, 초를 각각 계산해서 String.format()에 대응했습니다. 먼저 시간을 계산해 줍니다. 60*60으로 나눈 몫이 시간이 되겠죠. 그다음 시간에 역으로 60*60을 곱한 값을 입력값 seconds에서 뺀 다음 남은 값을 다시 60으로 나눠 분을 구해줍니다. 같은 방법으로 초도 구해주고 포맷팅 하면 완료입니다.

포맷에서는 항상 두자리 수로 시, 분, 초가 표현되어야 하기 때문에 %02d:%02d:%02d를 사용했습니다.

테스트 코드

솔루션 코드

package com.codewars;

public class HumanReadableTime {
    public static String makeReadable(int seconds) {
        int hh = seconds / (60 * 60);
        int mm = (seconds - (60 * 60 * hh)) / (60);
        int ss = seconds - (60 * 60 * hh) - (60 * mm);

        return String.format("%02d:%02d:%02d", hh, mm, ss);
    }
}

 

Best Practice

아래 코드와 같이 나머지 연산을 활용하면 분, 초를 더 쉽게 구할 수 있습니다. 분과 초는 0~59 범위를 가지기 때문에 %60으로 간단하게 구할 수 있네요.

public class HumanReadableTime {
  public static String makeReadable(int seconds) {
    return String.format("%02d:%02d:%02d", seconds / 3600, (seconds / 60) % 60, seconds % 60);
  }
}

 

 

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기