| 제출
function solution(n) {
return parseInt(n.toString(3).split("").reverse().join(""), 3);
}
| 풀이과정
toString 메서드를 사용하면 입력값을 3진법으로 변환할 수 있다.
변환한 3진법을 뒤집어서 parseInt 메서드로 3진법을 10진법으로 반환한다.
그 외 방법 1 ) 메서드 없이 풀기
function solution(n) {
let result = "";
let rest = n % 3;
let temp = parseInt(n / 3);
if(n === 1) return 1;
while (temp >= 3) {
result += rest;
rest = temp % 3;
temp = parseInt(temp / 3);
}
result += rest;
result += temp;
return parseInt(result, 3);
}
효율적인 코드는 아니지만,, 처음 생각했던 방식은 이러했다.
나머지 값을 rest에 저장하고 몫을 temp에 저장해두고 result에 계속 더해주었다.
그 외 방법 2 ) reduce 사용하기
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);
}
다른 사람의 풀이를 보니 이렇게 깔끔한 방법이 있었다 ,,,
n을 3으로 나눈 나머지를 answer 배열에 추가하고, n은 3으로 나눈 몫으로 계속해서 대체해준다.
answer에 들어가 있는 각각의 숫자에 3의 거듭제곱 순서로 곱해서 더해주면 3진법을 10진법으로 변환할 수 있다.
Ex) 0021(₃) = 0 * 3³ + 0 * 3² + 2 * 3¹ + 1 * 1 = 7
| 개념
parseInt()
console.log(parseInt(' 0xF', 16)); // 15
console.log(parseInt('321', 2)); // NaN
- 문자열 인자를 파싱하여 특정 진수의 정수를 반환한다.
- 매개변수
- 첫 번째 인자 - string
- 파싱할 값. 문자열이 아닐 경우 ToString 추상 연산을 사용해 문자열로 변환한다.
- 두 번째 인자 - radix (optional)
- string의 진수를 나타내는 2부터 36까지의 정수이다.
- Number 자료형이 아닌 경우 Number로 변환한다.
- 첫 번째 인자 - string
Number.prototype.toString([radix])
console.log((6).toString(2)); // '110'
console.log((254).toString(16)); // 'fe'
- 2와 36사이의 정수 radix를 지정하면 해당 진수에 맞게 Number 객체를 문자열로 반환한다.
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 약수의 개수와 덧셈 - level 1 (javascript) (0) | 2022.09.19 |
---|---|
[프로그래머스] K번째 수 - level 1 (javascript) (0) | 2022.09.05 |
[프로그래머스] 나머지가 1이 되는 수 찾기 - level 1 (javascript) (0) | 2022.09.05 |
[프로그래머스] 예산 - level 1 (javascript) (0) | 2022.09.05 |
[프로그래머스] 부족한 금액 계산하기 - level 1 (javascript) (0) | 2022.09.05 |