[프로그래머스]3진법 뒤집기

Benjamin·2022년 2월 12일
0

10진법 숫자를 입력 받아 3진법 숫자로 변환한 뒤 자릿수를 뒤집어 다시 10진법 수로 만드는 문제

ex) n = 45
=> 45를 3진법 수로 바꾸면 1200
=> 1200의 자릿수를 뒤집으면 0021
=> 3진법 수 21을 10진법으로 바꾸면 7

나의 수도코드)

  1. 10진법 수 n을 3진법 수로 바꾼다.
  • n을 3으로 나눈 나머지를 배열에 unshift한다.
  • 3으로 나눈 n의 몫을 다시 n에 저장한다.
  • 반복문으로 n이 3보다 작아질 때까지 반복한다.
  • 반복문이 끝난 후 현재 n을 배열에 unshift한다.
  1. 3진법 자릿수로 이루어진 배열을 10진법으로 전환한다
  • 배열의 첫 번째 요소가 1의자리 수, 두 번째 요소가 10의 자리수 ... 이다.
  1. 결과를 리턴한다.

나의 코드)

function solution(n) {
    let arr = [];
    let result = 0;
    
    while(n >= 3){
        arr.unshift(n % 3);
        n = parseInt(n / 3);
    };
    arr.unshift(n);
    
    for(let i = 0; i < arr.length; i++){
        result = result + arr[i]*(3**i);
    }
    return result;    
}

결과 확인 후 다른 사람들의 풀이를 보니

한 줄로 풀어낸 사람들도 많다..(reduce 짱짱)

#새로 배운 메소드

  • Array.prototype.reverse() : 배열의 순서를 반전해준다
    공식문서
  • Number.prototype.toString(n) : Number를 n진법 수 String타입으로 반환
    공식문서
  • Number.parseInt(string, radix) : 문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의 정수를 반환합니다.
    공식문서
    parseInt의 두 번째 인자(option)로 현재 수의 진수를 알 수 있다ㄷㄷ
    parseInt('21', 3) // dispaly 7
    <3진법 수 21을 10진법으로 변환해준다!>
profile
개발자 되기 프로젝트!

0개의 댓글