3진법 뒤집기

문제

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

제한사항
n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예
n result
45 7
125 229
입출력 예 설명
입출력 예 #1

답을 도출하는 과정은 다음과 같습니다.
n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
45 1200 0021 7
따라서 7return 해야 합니다.
입출력 예 #2

답을 도출하는 과정은 다음과 같습니다.
n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
125 11122 22111 229
따라서 229return 해야 합니다.

풀이

// 3진법으로 변환하는 재귀함수를 생성한다
// n이 3보다 작을 경우 남은 수를 마지막 자리에 붙인다
// 그렇지 않을 경우 3으로 나눈 나머지를 문자열 뒤에 붙이고 다시 재귀함수를 돌린다
// 3진법인 수를 반복문을 돌린다
// 수의 자릿수에 따라 3제곱을 곱해준다

let threeAnswer = "";
function three(n) {
    if (n < 3) {
        threeAnswer = threeAnswer + String(n);
        return;
    } else {
        threeAnswer = threeAnswer + String(n % 3);
        three(parseInt(n / 3));
    }
}

function solution(n) {
    let result = 0;
    three(n);

    for (let m = 0; m < threeAnswer.length; m++) {
        result = result + threeAnswer[m] * Math.pow(3, threeAnswer.length - 1 - m);
    }
    return result;
}

❗️ 오랜만에 재귀함수를 사용해보는데다가 3진법의 개념을 이해하는데 시간이 조금 걸렸다.

✏️ parseInt(): 함수는 문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의 정수를 반환한다.

좋은 웹페이지 즐겨찾기