인자로 초(second)를 받을 때, 분, 시간, 일, 년 으로 변환해서 출력하라.
1이 아닐 경우는 단위 뒤에s
를 붙여라.
EX)
n: 1 => 1second
n: 25 => 25seconds
n: 123 => 2minutes 3seconds
n: 3666 => 1hour 1minute 6secodns
function timeChange(num) { let answer = ''; const obj = { second: (n) => { return [n % 60, n / 60|0]; }, minute: (n) => { return [n % 60, n / 60|0]; }, hour: (n) => { return [n % 24, n / 24|0]; }, day: (n) => { return [n % 365, n / 365|0]; }, year: (n) => [n, 0] }; for(let k in obj) { const [result, remainder] = obj[k](num); result ? answer = result + (result > 1 ? `${k}s ` : `${k} `) + answer : null; num = remainder; if(!num) break; } return answer; }
처음에 고민을 많이 했던게
if
문으로 조건을 다 걸어 해야되나, 아니면switch
문을 써야되나였다.
그러다가 객체의value
로 함수를 할당하면key
호출로 객체 인자들을 함수로 사용할 수 있는게 생각나서 사용해 보기로했다.객체
obj
를 선언하고,key
값은 각 시간의 단위를 설정,value
는 인자를 받아서 시간 단위로 나눠서 나눈 값이랑 나머지를return
하게 함.나눈 값이
0
이면 문자열에 추가되지 않게 하고, 그렇지 않을 때는 1보다 크면 단위값 뒤에s
를 붇이게 함.더 이상 나눌수 없으면 반복문을 종료해서 문자열을 최종적으로
return
하게 함.