correctTime.js (7kyu 63)

Codewars 알고리즘 풀이


Problem

  • You have to create a method that corrects a given time string.
    • 시간 문자열을 올바르게 수정하는 메소드를 작성한다.
  • Time-Format is european.
    • 시간 형식은 유럽식이다.


For example:

“11:70:10” -> “12:10:10”

“19:99:99” -> “20:40:39”

“24:01:01” -> “00:01:01”

“52:01:01” -> “04:01:01”


Solution

function correctTime(str) {
  if (str === '') return '';
  if (!/\d\d:\d\d:\d\d/.test(str)) return null;
  
  let arr = str.split(':');
  arr = arr.map(i => parseInt(i));
  
  arr[1] += Math.floor(arr[2] / 60);
  arr[0] += Math.floor(arr[1] / 60);
  arr[2] = arr[2] % 60;
  arr[1] = arr[1] % 60;
  arr[0] = arr[0] % 24;
  
  arr = arr.map(i => (i < 10 ? '0' + i : i));
  
  return arr.join(':');
}

correctTime('');          // ''
correctTime('null');      // null
correctTime('041010');    // null
correctTime('04;10;10');  // null
correctTime('04:10:1a');  // null
correctTime('11:70:10');  // 12:10:10
correctTime('19:99:99');  // 20:40:39
correctTime('24:01:01');  // 00:01:01
correctTime('52:01:01');  // 04:01:01

\d: 숫자에 대응 (= [0-9])

test(): 대응되는 문자열이 있는지 검색하고, true/false를 반환한다.

map(): 배열 내 모든 element에 대해, 호출한 함수의 결과를 모아 새 배열로 반환한다.

parseInt(): 문자열을 구문 분석하고, 정수를 반환한다.

Math.floor(): 가장 가까운 정수를 반내림하고, 결과를 반환한다.

split(): 문자열을 부분 문자열로 분할하고, 새 배열로 반환한다.

join(): 배열의 모든 element를 결합하고, 새 문자열로 반환한다.