3진법 뒤집기

Creating the dots·2021년 11월 2일
0

Algorithm

목록 보기
33/65

프로그래머스

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

n진법 수 A를 m진법 수 B로 바꾸려면, A를 m으로 반복해서 나눈 나머지들과 몫을 활용하면 된다.
예를 들어, 10진법 수 45를 3진법으로 표현해보자. 45를 3으로 나누었을때 몫은 15, 나머지는 0이다. 이어서 3으로 또 나누었을때 몫은 5, 나머지는 0이다. 몫이 3보다 작아질때까지 이 과정을 반복한 후 마지막 몫부터 나머지를 일렬로 이어쓰면 된다.

나의 풀이

  • 10진법 수를 3진법으로 만든다. 이때, 나머지를 변수 ternary에 저장하여 뒤집힌 3진법 형태로 저장된다.
  • 뒤집힌 3진법 수를 10진법으로 바꿔 리턴한다.
function solution(n){
  //10진법 수를 3진법으로 만드는 과정
  let ternary = "";
  while(n>=3){
    ternary += n%3;
    n=Math.floor(n/3);
  }
  ternary += n;
  
  //3진법 수를 10진법으로 만드는 과정
  let length = ternary.length;
  let res = 0;
  for(let i=0;i<ternary.length;i++){
    res += Number(ternary[i])*Math.pow(3,length-1);
    length--;
  }
  return res;

다른 사람의 풀이

  • toString 메소드로 3진법 수로 변환해 문자열 형태로 만든다.
  • split 메소드로 문자열을 배열에 저장한다.
  • reverse 메소드로 배열의 순서를 뒤집는다.
  • join 메소드로 배열의 요소를 하나의 문자열로 합친다.
  • parseInt 메소드로 문자열을 n진법 숫자로 만들어 리턴한다.
function solution(n){
  var answer = 0;
  answer = parseInt(n.toString(3).split("").reverse().join(""),3);
}

Number.prototype.toString([radix])

  • 숫자를 n진법으로 바꾼후 문자열로 만든다.
  • 만약 toString()에 2와 36 사잇값이 아닌 radix(기수)가 주어지면, RangeError가 발생한다.

parseInt(string, radix)

  • string
    분석할 값으로 string이 문자열이 아니라면 문자열로 변환한다. 문자열의 선행 공백은 무시한다.
  • radix optional
    string이 표현하는 정수를 나타내는 2와 36 사이의 진수. radix가 2보다 작거나 36보다 큰 경우 NaN을 반환한다.

지금까지 toString과 parseInt 메소드를 사용했지만 인자를 넣을 수 있다는 사실을 몰랐는데, 인자를 넣어 n진법 숫자로 만들 수 있다는 것을 알게되었다.
Math.floor와 parseInt의 기능의 차이도 생각해볼 수 있었다.

profile
어제보다 나은 오늘을 만드는 중

0개의 댓글