Problem Solving/프로그래머스

[프로그래머스/JavaScript] 3진법 뒤집기

세고래 2022. 11. 3. 22:49

https://school.programmers.co.kr/learn/courses/30/lessons/68935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


1) 풀이

사실은 예전에 자바스크립트로 푼 문제인데 새로 풀어보니 또 다른 방식으로 풀게 되었다

자바스크립트에서 진법 변환하는 건 그렇게 어렵지 않은데

막상 써먹으려고 하면 잘 기억이 안 나서 😥 어쩔 수 없이 숫자 하나하나 진법 변환을 해주었지만

나름대로 의미가 있는 것 같아 풀이를 써보겠다

 

단순하게 인자로 받은 값을 우선 3진수로 바꿔주었다

3으로 나눈 나머지를 tmp 라는 배열에 저장한 후, 해당 값들에 하나씩 3의 거듭제곱을 answer라는 변수에 더해주기로 했다

문제를 보면, 내가 구한 3진수를 뒤집어서 계산해야 하는 게 맞다

하지만 나는 tmp 배열의 인덱스를 이용하여 3의 거듭제곱을 진행하려고 했으므로,

오른쪽부터 3의 0, 1, 2 ...승을 곱해주는 원래의 3진법과는 달리,  인덱스는 왼쪽에서부터 0, 1, 2..의 순으로 높아지기 때문에 push 가 아니라 배열의 맨앞에 집어넣어주는 unshift를 이용했다

 

그렇게 3**i 의 식으로 거듭제곱을 한 값을 answer에 모두 더해서 return 하면 끝!

하나하나 변환해주긴 했지만, 자바스크립트에서는 간단한 방법이 있으니 알아두자!

2) 최종 소스코드
function solution(n) {
   const tmp=[];
    let answer=0;
    while(n!==0){
       tmp.unshift(n%3);
        n=Math.floor(n/3);
   }    
    for(let i=0;i<tmp.length;i++){
        answer+=tmp[i]*3**i;
    }
    return answer;
}
3) 참고자료

https://medium.com/web-dev-note/javascript-%EC%A7%84%EB%B2%95-%EB%B3%80%ED%99%98-330694083495

 

Javascript 진법 변환

직접 구현하지 말자

medium.com

 

728x90