Description
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
Constraints
n은 1 이상 100,000,000 이하인 자연수입니다.
My Solution
// My solution 1
function solution(n) {
return parseInt(n.toString(3).split('').reverse().join(''), 3);
}
// My solution 2
function solution(n) {
return parseInt([...n.toString(3)].reverse().join(''), 3);
}
toString을 이용해 n을 3진법으로 변환한 후, split('') 또는 spread syntax를 이용해 배열로 만들어준다.
그 후 reverse()를 이용해 각 자릿수를 뒤집어 주고, join('')으로 문자열로 만든다.
이것을 parseInt 메서드를 이용하여 3진법인 수를 10진법으로 다시 변환한다.
parseInt에 대해서 좀 더 알아보자. (출처 : JavaScript Deep Dive 333~336p)
parseInt
parseInt는 전달받은 문자열 인수를 정수로 parsing해서 반환한다.
parseInt(string, radix)의 형태로 쓰인다.
여기서 radix는 진법을 나타내는 기수를 말한다. 2~36을 전달할 수 있다.
기수를 지정하면 첫 번째 인수로 전달된 문자열을 해당 기수의 숫자로 해석하여 반환한다.
반환값은 언제나 10진수이다.
전달받은 인수가 문자열이 아니면 문자열로 반환한 다음, 정수로 해석해서 반환한다.
첫 번째 인수로 전달한 문자열의 첫 번째 문자가 해당 지수의 숫자로 변환될 수 없다면 NaN을 반환한다.
Other's Solutions
function solution(n) {
const answer = [];
while (n !== 0) {
answer.unshift(n % 3);
n = Math.floor(n / 3);
}
return answer.reduce((acc, v, i) => acc + v * Math.pow(3, i), 0);
}
toString과 parseInt를 쓰지 않고, 대신 while과 unshift 등 다른 메서드를 이용한 풀이이다.
function solution(n) {
let res = [];
const run = num => {
if (num < 3) {
res.push(num);
return;
}
res.push(num % 3);
return run(Math.floor(num / 3));
};
run(n);
return res
.map((a, i) => a * 3 ** (res.length - 1 - i))
.reduce((r, a) => r + a);
}
재귀함수를 활용한 풀이이다.
'Algorithms > Programmers' 카테고리의 다른 글
프로그래머스 레벨 2 : [1차] 캐시 (자바스크립트) (0) | 2022.04.24 |
---|---|
[프로그래머스 Level 1] 2016년 (자바스크립트) (0) | 2021.10.19 |
[프로그래머스 Level 1] 핸드폰 번호 가리기 (자바스크립트) (0) | 2021.10.18 |
[프로그래머스 Level 1] 나머지가 1이 되는 수 찾기 (자바스크립트) (0) | 2021.10.17 |
[프로그래머스 Level 1] 가운데 글자 가져오기 (자바스크립트) (0) | 2021.10.17 |