:ledger: 문제 설명

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

:one: 제한사항

  • n은 1 이상 100,000,000 이하인 자연수입니다.

:two: 입출력 예

n return
45 7
125 229

:three: 입출력 예 설명

:pushpin: 3-1) 입출력 예 #1

  • 답을 도출하는 과정은 다음과 같습니다.
n(10진법) n(3진법) 앞뒤 반전(3진법) 10진법으로 표현
45 1200 0021 7

:pushpin: 3-2) 입출력 예 #2

  • 답을 도출하는 과정은 다음과 같습니다.
  • 따라서 229를 return 해야 합니다.
n(10진법) n(3진법) 앞뒤 반전(3진법) 10진법으로 표현
125 11122 22111 229

:ledger: 문제 풀이

function solution(n) {
  let result = n.toString(3).split("").reverse().join("");
  return parseInt(result, 3);
}
solution(45);

:computer: 풀이

  1. n을 3진수 문자열로 변환하기 위해 toString을 사용한다. (45.toString(3) => ‘1200’)
  2. split을 사용해서 배열로 변환 후 reverse()로 배열을 뒤집어서 0021로 만들어주고, join으로 다시 문자열로 변환한다. (‘0021’)
  3. parseInt(result, 3)을 사용해서 뒤집어진 3진수 문자열을 다시 10진수로 변환하여 값을 반환한다.

:fire: 다른 사람의 풀이 참고

사실 이 문제를 처음 봤을 때 3진수, 10진수.. 변환 하는 방법을 몰라서 검색 후 문제를 풀고 풀이 방식을 보았다.

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

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges