알고리즘, 자료구조/프로그래머스

프로그래머스/3진법 뒤집기/javascript

soohkang 2021. 6. 30. 14:50
728x90

잘 못 접근 한 코드

function solution(n) {
    var answer = 0;
    
    let decimalToTernary = [];
    let TernaryToDecimal = [];
    
    // 10진법 > 3진법
    while(n > 0) {
        let result = (n % 3);
        decimalToTernary.push(result);
        n /= 3;
    }
    console.log(decimalToTernary);
    
    // 앞뒤 반전
    
    // 3진법 > 10진법
    
    
    return answer;
}

결괏값

	[
                        0,                        0,                       2,
       1.6666666666666667,       0.5555555555555556,      0.1851851851851852,
       0.0617283950617284,       0.0205761316872428,    0.006858710562414266,
    0.0022862368541380885,    0.0007620789513793628,  0.00025402631712645424,
   0.00008467543904215141,  0.000028225146347383805, 0.000009408382115794602,
  0.000003136127371931534, 0.0000010453757906438446,   3.4845859688128153e-7,
    1.1615286562709385e-7,     3.871762187569795e-8,   1.2905873958565983e-8,
     4.301957986188661e-9,    1.4339859953962205e-9,   4.779953317987402e-10,
   1.5933177726624674e-10,    5.311059242208224e-11,  1.7703530807360748e-11,
    5.901176935786916e-12,   1.9670589785956387e-12,   6.556863261985462e-13,
   2.1856210873284876e-13,    7.285403624428291e-14,  2.4284678748094305e-14,
  ... 582 more items
]

 

단순하게 진법 변환하려고 했더니 javascript는 뭔가 다른 방법이 있나 보다.

위의 경우는 왜 그렇게 되었는지 잘 모르겠다. 추가 공부해야 할 듯..

 

아래에서 알아보자.

 

 

정답 처리된 코드

function solution(n) {
    var answer = 0;
    
    // 10진법 > 3진법
    // 앞뒤 반전
    // 3진법 > 10진법
    
    let reversedNumber = n.toString(3).split('').reverse().join('');
    answer = parseInt(reversedNumber, 3);
    return answer;
}

 

 

알아야하는 내용

Number.prototype.toString()

numObj.toString([radix]) : 리턴 받고자 하는 진수를 매개변수로 넣으면 된다.

 

String.prototype.split()

str.split([separator [, limit]) : 주어진 문자열을 separator마다 끊은 부분 문자열을 담은 Array가 반환된다.

separator에는 정규표현식을 받을 수 있음.

 

Array.prototype.reverse()

a.reverse() : 순서가 반전된 배열을 반환한다.

 

Array.prototype.join()

arr.join([separator]) : 배열의 각 요소를 구분할 문자열을 매개변수로 전달합니다. 생략하면 쉼표로 구분되고, 빈 문자열이면 모든 요소들이 사이에 아무 문자도 없이 연결됩니다.

 

parseInt()

parseInt(string, radix) : 주어진 string을 분석한 정수, radix를 매개변수로 전달할 수 있습니다.