본문 바로가기
코딩 문제/프로그래머스 [ JavaScript ]

[ 프로그래머스 / JavaScript ] [ 월간 코드 챌린지 시즌1 ] 3진법 뒤집기

by CODESIGN 2022. 9. 20.

https://school.programmers.co.kr/learn/courses/30/lessons/68935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제 설명


자연수 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
  • 따라서 7을 return 해야 합니다.

 

입출력 예 #2

  • 답을 도출하는 과정은 다음과 같습니다.

n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현

n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
125 11122 22111 229
  • 따라서 229를 return 해야 합니다.

 

 

나의 풀이


n의 숫자를 3으로 나누어 주어 나머지를 numbers 배열에 저장하였다.

numbers의 배열을 reverse해준뒤,

거듭제곱(**)을 사용하여  10진법을 구하였다.

 

function solution(n) {
    var answer = 0;
    var numbers = [];
    while (n != 0) {
        numbers.push(n%3);
        n = Math.floor(n/3);
    }
    numbers.reverse();    // [ 1, 2, 0, 0 ]
    for(let i = 0; i < numbers.length; i++) {
        answer += (numbers[i] * 3**i);
    }
    return answer;
}

 

 

 

다른 사람 풀이


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

 

각 부분의 의미를 파악해 보았다.

[...n.toString(3)];  // [ '1', '2', '0', '0' ]

 

toString의 구문toString([radix])로 3을 적어줌으로써 3진법을 구했다.

 

마지막에 parseInt로 10진법으로 표현을 했다.

 

parseInt의 구문은 우리가 흔히 알고 있는 parseInt(string)와 오늘 처음 알게 된 parseInt(string, radix)이 있다.

 

코드가 훨씬 간결하고 runtime이 짧다.

 

 

 

참고


 

Number.prototype.toString() - JavaScript | MDN

**toString() **메서드는 특정한 Number 객체를 나타내는 문자열을 반환합니다.

developer.mozilla.org

 

parseInt() - JavaScript | MDN

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

developer.mozilla.org

 

 

댓글