반응형

 

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

 

 

 

 

 

 

** Javascript

 

 

function solution(n) {
    let ternary = [];
    let answer = 0;
    while (n >= 1) {
        if (n > 1) {
            ternary.push(n % 3);
        } else {
            ternary.push(n);
        }
        n = parseInt(n / 3);
    }
    for (let i = 0; i < ternary.length; i++) {
        answer += ternary[i] * Math.pow(3, ternary.length - 1 - i);
    }
    return answer;
}

 

 

 

toString 을 이용한 방법 효율성은 위 코드가 더 높다

 

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

 

 

이 식이 내 맘 속 베스트,,

 

 

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);   
}

 

 

** Python

 

def solution(n):
    arr = []
    result = 0
    while True :
        if n == 0:
            break
        arr.append(n % 3)
        n = n // 3
    for i, x in enumerate(arr):
        result += x * 3 ** (len(arr) - i - 1)
    return result

 

 

 

** Java

 

 

log3N + 1 해서 자릿수 먼저 구해준 다음에 거꾸로 제곱해감

 

class Solution {
    public int solution(int n) {
        int answer = 0;
        int cnt = (int) (Math.log(n) / Math.log(3));
        while (cnt >= 0) {
            int div = n % 3;
            answer += div * Math.pow(3, cnt);
            n = n / 3;
            --cnt;
        }
        return answer;
    }
}

 

반응형

+ Recent posts