본문 바로가기
코딩 문제/프로그래머스 [ 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;
}

 

 

 

다른 사람 풀이


핵심 함수 설명


• toString([radix]): 10진수 숫자를 radix(기수)로 변환합니다. radix에 3을 적어줌으로써 3진법 변환이 가능합니다.

• parseInt(string, radix): 문자열을 radix에 따라 해석하여 10진수로 변환합니다.

 

 

코드


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

 

 

코드 설명


n.toString(3): 숫자 n을 3진수로 변환해 문자열로 반환합니다.

// 예시)
45.toString(3) → "1200"

 

[...n.toString(3)]: 3진수 문자열을 배열로 변환합니다.

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

 

.reverse().join(""): 배열을 뒤집고 다시 문자열로 합칩니다.

parseInt(문자열, 3): 3진수 문자열을 10진수로 변환합니다.

 

 

 

 

참고


 

Number.prototype.toString() - JavaScript | MDN

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

developer.mozilla.org

 

parseInt() - JavaScript | MDN

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

developer.mozilla.org

 

 

댓글