function solution(n) {
const ternaryScaler__Reverse = n.toString(3).split("").reverse().join("")
return parseInt(ternaryScaler__Reverse, 3);
}
https://school.programmers.co.kr/learn/courses/30/lessons/68935
나의 코드
function solution(n) {
const ternaryScaler__Reverse = n.toString(3).split("").reverse().join("")
return parseInt(ternaryScaler__Reverse, 3);
}
toString 이 2~36의 진법을 표현하는 데 사용될 수 있다니..
진법을 바꿀때는 꽤 어렵다
88이라는 숫자를 2진법으로 나타내는 방법은
88을 2로 계속 나누면 된다.
그래서 몫이 2 미만이 될때 까지 나눈 나머지 부분을 연숙으로 써주면 2진수로 변환이 된다.
반대로 88의 2진법으로 표기된 것을 다시 10진법으로 어떻게 바꿀까?
이렇게 해서 2진수가 1인 부분의 10진수 부분을 더해주면 된다
그래서 64, 16 ,8을 다 다해주면 88이 된다.
이것을 바탕으로 아래 다른 사람 풀이를 보자
다른 사람 풀이
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 * 3**i),0);
}
unshift는 배열에 사용가능하고
새로운 배열을 맨 앞쪽에 추가하고 새로운 길이를 반환한다.
const array1 = [1, 2, 3];
console.log(array1.unshift(4, 5));
// expected output: 5
console.log(array1);
// expected output: Array [4, 5, 1, 2, 3]
answer에 나머지들은 전부 넣어주면서
n은 계속 3으로 나누어서 몫을 줄여나간다.
그럼 answer에는 맨처음에 나눈 나머지가 맨뒤로 맨 마지막에 남은 나머지가 맨 앞으로 오면서 3진법 표현이 완성된다.
그런뒤 reduce를 사용한다.
v로 anwer의 몫을 하나하나씩 받으면서 3의 i를 제곱한 수와 곱한다 이렇게 되면 다시 10진법으로 된다.
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스-JS] level.1 두 개 뽑아서 더하기 (0) | 2022.07.19 |
---|---|
[프로그래머스-JS] level.1 예산 (0) | 2022.07.15 |
[프로그래머스-JS] level.1 약수의 개수와 덧셈 (0) | 2022.07.14 |
[프로그래머스-JS] level.1 실패율 (0) | 2022.07.14 |
[프로그래머스-JS] level.1 폰켓몬 (0) | 2022.07.04 |