[프로그래머스] 124의 나라

2022. 6. 29. 18:56알고리즘/프로그래머스

이게 나라?

문제

[코딩테스트 연습 - 124 나라의 숫자

programmers.co.kr](https://programmers.co.kr/learn/courses/30/lessons/12899)

풀이

function solution(n) {
    const answer = [];

    /*
        1, 2, 4를 사용해서 차례대로 숫자가 커질 때 마다 숫자가 늘어남.
        숫자를 3으로 나눠서 나머지를 그대로 뒷자리에.
        몫은 3으로 나눠지지 않을 떄 까지 재귀.
    */
    const divider = (val) => {       
        const remain = val % 3; // 나머지
        let share = parseInt(val / 3); // 몫

        if(remain === 0) {
            share -= 1;
            answer.push(4)   
        }else answer.push(remain);

        if(val <= 3) return;

        divider(share);
    }

    divider(n);

    return answer.reverse().join('');
}
  • 처음에 규칙도 못찾고 해맸는데, 규칙을 찾고 코드를 짠 것도 너무 지저분함.

나름 개선한 풀이

function solution(n) {
    const answer = [];
    const pattern = [4, 1, 2];

    /*
        1, 2, 4를 사용해서 차례대로 숫자가 커질 때 마다 숫자가 늘어남.
        숫자를 3으로 나눠서 나머지를 그대로 뒷자리에.
        몫은 3으로 나눠지지 않을 떄 까지 재귀.
    */
    const divider = (val) => {       
        const remain = val % 3; // 나머지

        answer.push(pattern[remain]);

        if(val <= 3) return;

        divider(remain === 0 ? parseInt(val / 3) - 1 : parseInt(val / 3));
    }

    divider(n);

    return answer.reverse().join('');
}
  • pattern 이라는 배열을 만들어서 index로 패턴에 접근할 수 있도록 수정함.

 

문제가 굉장히 신선했다..!

이게 나라?