코딩 테스트/test_javaScript

[코딩테스트/javaScript] 3진법 뒤집기

ijooha 2025. 1. 2. 11:08

어떻게든 패턴 찾고싶어서 공책 펴놓고 이것저것 다 써봤다.............

그렇게 찾은 패턴

십진수에서 3으로 계속 나누면서 생기는 나머지들 + 마지막으로 나눠지는 수를 이으면 삼진법 뒤집은 모양임

for (let i=0; n>=3; i++) {
        arr.push(n%3)
        n = Math.floor(n /= 3);
    }
    arr.push(n);

우선 삼진수로는 만들었다. 그런데 다시 십진수로 만드는 게 또 난관이다.

우선 내가 세운 식은,

arr[(arr.length-1)-j] * (3 ** j)인데,

//예시인 125의 3진수를 뒤집으면 22111이다.
let index = arr.length-1; //이라고 가정했을 때
//자릿수 * 3의 x제곱

arr[index-0] * (3**0) // 1 * 1 = 1
arr[index-1] * (3**1) // 1 * 3 = 3
arr[index-2] * (3**2) // 1 * 9 = 9
arr[index-3] * (3**3) // 2 * 27 = 54
arr[index-4] * (3**4) // 2 * 81 = 162

//옆의 값들을 모두 합치면 229가 된다.

그래서 결론은

function solution(n) {
    let arr = [];
    
    // 삼진수 배열로
    for (let i=0; n>=3; i++) {
        arr.push(n%3)
        n = Math.floor(n /= 3);
    }
    arr.push(n);
    
    // 십진수로
    let index = arr.length -1;
    let answer = 0;
    
    for (let j=0; j<=index; j++) {
        answer += arr[index-j] * (3 ** j);
    }
    return answer;
}

지금까지 푼 문제중에 제일 오래 걸리고 제일 재밌었음

 

 

다른 사람 풀이

const solution = (n) => {
    return parseInt([...n.toString(3)].reverse().join(""), 3);
}

어떻게 이게 나온거지 ㅎ ㅏ 분석해봐야겠다. 세상에 똑똑한 사람들이 정말 많다!

n.toString(3) 은 n을 3진수 문자열로 반환하는 메서드다..^^! 하하! 

그리고 parseInt()를 하면 십진수로 변환된다~!