프로그래머스 : 3진법 뒤집기 (level 1)

김진권·2021년 7월 28일
0

algorithm

목록 보기
5/10

<문제>


1. <나의 풀이>

function solution(n) {
    var answer = 0;
    const ternaryArray = [];
    let compareNumber = 1;

    function go() {
        if (compareNumber < n) {
            compareNumber *= 3;
        }

        else if (compareNumber === n) {
            n -= compareNumber;
            ternaryArray.push(1);
            let i = 1;
            let numberOfZero = 0;
            while (i !== compareNumber) {
                i *= 3;
                numberOfZero += 1;
            }
            for (let i = 0; i < numberOfZero; i ++) {
                ternaryArray.push(0);
            }
        }

        else if (compareNumber > n) {
            compareNumber /= 3;
            if (compareNumber * 2 <= n) {
                n -= compareNumber * 2;
                ternaryArray.push(2);
                if (n === 0) {
                    let i = 1;
                    let numberOfZero = 0;
                    while (i !== compareNumber) {
                        i *= 3;
                        numberOfZero += 1;
                    }
                    for (let i = 0; i < numberOfZero; i ++) {
                        ternaryArray.push(0);
                    }
                }
            }
            else if (compareNumber <= n) {
                n -= compareNumber;
                ternaryArray.push(1);
                if (n === 0) {
                    let i = 1;
                    let numberOfZero = 0;
                    while (i !== compareNumber) {
                        i *= 3;
                        numberOfZero += 1;
                    }
                    for (let i = 0; i < numberOfZero; i ++) {
                        ternaryArray.push(0);
                    }
                }
            }
            else {
                ternaryArray.push(0);
            }
        }

        if (n !== 0) go();
    }
    go();

    let ternaryNumber = 1;
    for (let i = 0; i < ternaryArray.length; i ++) {
        answer += ternaryArray[i] * ternaryNumber;
        ternaryNumber *= 3;
    }

    return answer;
}

✳️ 풀이 과정 :

1️⃣ 10진법의 수를 3진법의 수로 만드는 함수를 만든다.
3진법의 수를 담을 배열을 만든다.
가장 큰 3의 제곱수부터 차례로 빼주면서 배열에 요소를 추가해서 배열을 완성한다.


2. 고수의 풀이

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

✳️ 풀이 과정 :

...나중에 작성하겠다.


출처 : 프로그래머스 : 3진법 뒤집기
참고 : ParseInt() -Javascript | MDN
ParseInt() 참고
전개구문 -javascript | MDN
Number.prototype.toString() -Javascript | MDN
Array.prototype.reverse() -Javascript | MDN

profile
start!

0개의 댓글