Coding test

[프로그래머스] 3진법 뒤집기 (Level 1)

Jiwoo 2022. 4. 19. 23:33

문제

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
 

  • 제한사항

    n은 1 이상 100,000,000 이하인 자연수입니다.
     

나의 풀이

function solution(n) {
    // n (3진법) -> 뒤집음 -> 10진법
    return parseInt(n.toString(3).split("").reverse().join(""), 3);
}

 

  • 정확도 테스트 결과

 

다른 풀이

1. 간단한 풀이

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

 
화살표 함수로 변경해서 썼고, 전개구문을 활용했다.
전개구문은 이터러블 객체에 적용할 수 있는 문법으로, 배열이나 문자열의 각 요소를 전달할 수 있다.
 
예를 들어
let n = 45
[...n.toString(3)] 을 출력하면
45를 3진법으로 바꾼 문자열 1200의 각 요소가 배열의 요소가 된다.
[...n.toString(3)] = ["1","2","0","0"]
 

  • 10진수 -> n진수
    value.toString(n) => 문자열 반환
     

  • n진수 -> 10진수
    parseInt(value, n) => 숫자 반환
     

  • 정확도 테스트 결과


     

2. 내장 함수를 사용하지 않은 풀이

function solution(n) {
    const answer = [];
    while(n !== 0) {
        answer.unshift(n % 3);
        n = Math.floor(n/3);
    }
    return answer.reduce((acc,v,i) => acc + (v * Math.pow(3, i)),0);   
}

 

  • 정확도 테스트 결과