본문 바로가기

코딩테스트

[프로그래머스] level1. 3진법 뒤집기 (javascript)

반응형

문제

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

의식의 흐름

  1. 진수 표현을 어떻게 하는가? = 제곱근으로 한다.
  2. 3진수 표현을 하려면 어떻게 할까? = 3으로 나눈 몫과 나머지를 이용한다.
  3. for 문과 배열을 통해서 3진수의 자리에 맞는 숫자를 넣어준다.

초기 코드

function solution(n) {
    var answer = 0;
    let x = 0;
    let y = n;

    while(y >= 3){
        x = x+ 1;
        y = parseInt(y / 3);
    }

    let tmp_arr = []
    let reserve_arr=[]

    for(let i =0; i < x+1 ; i ++){
        tmp_arr.push(0);
        reserve_arr.push(0);
    }

    let z = n
    for ( let j = 0; j < x; j++){
        if (z >= Math.pow(3, x-j)){
            z = z - Math.pow(3, x-j)
            if (z >= Math.pow(3, x-j)){
                z = z - Math.pow(3, x-j)
                tmp_arr[j] = 2    
            } else{
                tmp_arr[j] = 1
            }
        }
    }

    tmp_arr[x] = z

    for(let q =0; q < x+1;q++){
        reserve_arr[x-q] = tmp_arr[q];
    }
    for(let w =0; w < x+1;w++){
        if (reserve_arr[w] !=0 ){
            answer = answer + (Math.pow(3, x-w)*reserve_arr[w])
        }
    }

    return answer;
}

문제점 : Math.pow를 통해서도 지수를 나타낼 수 있었지만, 더 쉬운 방법이 있었다.
더 쉬운 방법이 있는데 이용하질 못했다.

다른 사람의 풀이

방법1.

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

방법2.

function solution(n) {
    return parseInt(n.toString(3).split('').reverse().join(''),3)
}

toString()으로 10진수를 특정 지수로 변환할 수 있다는 점과,
parseInt를 통해 특정 지수를 10진수로 변환 할 수 있다는 점만 알고 있었다면
풀수 있는 문제였다.

반응형