연습 2021/01/02

이호현·2021년 1월 2일
0

Algorithm

목록 보기
41/138

[문제]

인자로 초(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하게 함.

profile
평생 개발자로 살고싶습니다

0개의 댓글