본문 바로가기

Dev/Algorithm

알고리즘 문제 | 프로그래머스 - 3진법 뒤집기

반응형

문제

 

풀이

 

음.. 겁나 어려워보이는구만...

 

일단 10진법을 3진법으로 변환하고

변환한 값을 앞뒤로 반전한 다음

반전된 값을 10진법으로 리턴해라!!

 

3진법으로 변환하기 위해서는 나머지 값을 계속해서 구해야 하니까

반복문을 사용해야 하고

앞뒤 반전을 해야하니까 reverse 쓰고

10진법으로 다시 변환해야 하니까 3진법을 10진법으로 구하는 로직도 짜야하는군

 

해보자 해보자!!

 

function solution(n) {
    var answer = 0;
    var myRemainder = 0;
    var myStringTemp = '';

    while(n > 0) {
        myRemainder += n % 3; // 나머지
        n = parseInt(n / 3); // 몫

        myRemainder = myRemainder.toString();
    }
    let sRemainder = myRemainder;
    let bLength = myRemainder.length;
    myRemainder = parseInt(myRemainder);
    sRemainder = sRemainder.split('').reverse();


    for(let i=(bLength-1); i>=0; --i) {
        let squareRoot = Math.pow(3, i); // 제곱근
        let bNumber = parseInt(sRemainder[i]);


        answer += (squareRoot * bNumber);
    }

    return answer;
}

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

남들 코드 보기 전엔 다 이렇게 하는 줄 알았짘ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

눈물난다 증말...

 

 

다른 사람 코드

 

와 toString, parseInt 메소드에 진법으로 변환해주는 기능이 있네

어이없다.. 허탈하다.. 짜증난다.. 검색해볼걸............................................

 

 

 

※ 객체의 타입에 따른 toString() 메소드

더보기

 

 

풀이를 해보자면 !

 

예를 들어 n이 11이라고 가정했을 때,

n.toString(3)으로 11을 3진법으로 나타내서 102가 도출되면

전개연산자로 102를 배열로 변환하면 ["1", "0", "2"]

이걸 reverse 메소드로 순서 바꿔준 다음

다시 join 메소드로 문자열로 바꾸고 parseInt로 3진법 정수로 표현

 

와 ... 짱이다짱이야...

반응형