알고리즘/프로그래머스

[Lv2] 124 나라 숫자

창고 2021. 6. 21. 14:54

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

 

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

 

programmers.co.kr


10진수는 0부터 9까지의 숫자를 이용해서 수를 표현하는 것

4진수는 0부터 3까지의 숫자를 이용해서 수를 표현하는 것

 

4진수를 이용해서 수를 표현하면

1(1), 2(2), 3(3), 4(10), 5(11), 6(12), 7(13), 8(20), 9(21)... 처럼 10진수를 4로 나누었을 때 '몫+나머지'의 형태로 표현

 

그렇다면 여기서 0을 사용 불가능하게 해서 1, 2, 3만 사용이 가능하다면

1(1), 2(2), 3(3), 4(11), 5(12), 6(13), 7(21), 8(22), 9(23)...

 

0을 제외했을 때 새로운 규칙이 나오는데, 이것을 파악해야 본 문제를 풀 수 있음.

function solution(n) {
    let answer = '';
    let remainder = ['4', '1', '2'];
    let r;
    let q = n;

    while(1) {
        r = q % remainder.length;
        answer = remainder[r] + answer;

        if(q % remainder.length === 0) {
            q = Math.floor(q / remainder.length) - 1;
        } else {
            q = Math.floor(q/ remainder.length);
        }

        if(q <= 2) {
            if(q !== 0) answer = q + answer;
            break;
        }
    }

    return answer;
}