https://school.programmers.co.kr/learn/courses/30/lessons/68935
문제 설명
자연수 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이 짧다.
참고
'코딩 문제 > 프로그래머스 [ JavaScript ]' 카테고리의 다른 글
[ 프로그래머스 / JavaScript ] 숫자 문자열과 영단어 (1) | 2022.09.21 |
---|---|
[ 프로그래머스 / JavaScript ] JadenCase 문자열 만들기 (0) | 2022.09.21 |
[ 프로그래머스 / JavaScript ] 이진 변환 반복하기 (0) | 2022.09.20 |
[ 프로그래머스 / JavaScript ] 최댓값과 최솟값 (0) | 2022.09.20 |
[ 프로그래머스 / JavaScript ] 평균 구하기 (0) | 2022.09.20 |
댓글