본문 바로가기

Algorithm/문제풀이

Programmers - 124 나라의 숫자 / Javascript

 

function solution(n) {
    const array = ['4', '1', '2'];
    let answer = '';
    while(n) {
        answer = array[n % 3] + answer;
        n = (n % 3 === 0)? parseInt(n / 3) - 1 : parseInt(n / 3);
    }
    return answer;
}

3 * n번째의 숫자를 변환하는 과정에서 규칙 찾는데서 오래 걸렸다.

기본적으로 숫자 n을 3으로 나눴을 때 나머지가 1이나 2로 나누어 떨어지면 1, 2가 되고 나머지가 0인 경우에는 4가 된다. 

따라서 나머지에 0, 1, 2 index에 맞춰 ['4', '1', '2'] array를 만들어준다.

 

3 * n번째의 숫자가 아닌 경우에는 숫자 n을 0이 될 때 까지 계속해서 3으로 나누면서 나머지에 해당하는 array[3으로 나눈 나머지] + answer를 넣어주면 되지만 3 * n번째의 숫자(3으로 나눴을 때 나머지가 0인 경우)에는 다음 숫자 n을 3으로 나눈 몫 - 1로 대입해주어야 한다.

 

예를 들어 n이 3일때는 3으로 나눴을 때 나머지가 0 이므로 첫번째 반복시 answer = array[0] + answer;이 되고 그리고 n = (3 / 3) - 1이므로 0이 된다.

 

n이 6인 경우에는 첫번째 반복시 answer = array[0] + answer; 이고 다음 n에 대입될 값은 n = (6/3) - 1이므로 1이 된다.

두번째 반복시에 앞에서 n이 1이 되서 들어왔으므로 answer = array[1] + '4'; 이므로 최종 answer값은 14가 된다.