728x90
문제
풀이
function solution(n) {
var answer = 0;
let sum = [];
while(n > 0)
{
sum.push(n % 3);
n = Math.floor(n / 3);
}
sum.reverse();
for(let i = 0; i < sum.length; i++)
{
answer += sum[i] * 3 ** i;
}
return answer;
}
해설
10진법인 수 n을 3진법의 수로 바꾸기 위해서 우선 데이터를 계속 나누어주어야한다.
그렇게 하기 위해서 Math.floor(n / 3)을 해주어야하는데
Math.floor()이란? 소수점의 수가 존재할 때 자동으로 소수점의 수를 버리게 해주어서 sum의 배열에 들어갈 수가 정수가 되도록 하였다. 그렇게 0이 될때까지 계속 sum에 push를 해준다면 즉 n의 수가 3이하라면 while문을 탈출하게 되고 sum이라는 배열에는 3진법의 수가 들어가 있게 된다. 이제 이를 뒤집어주어야한다. 이 숫자의 배열을 뒤집기 위해서 reverse()함수를 사용하였는데, 이 함수를 사용하게 되면 배열 안의 값들이 뒤집어진다.
그리고 sum의 길이만큼 for문을 돌려서 해당하는 (자릿 수 * 3)의 제곱 자리수 를 해준 값을 전부 다 더해주면 3진접의 뒤집어진 값을 구할 수 있다.
다른사람의 풀이
const solution = (n) => {
return parseInt([...n.toString(3)].reverse().join(""), 3);
}
n.toString(num)를 하면 해당 숫자의 num진법으로 숫자가 바뀐다는 것을 이 코드를 보고 배울 수 있게 되었다. 해당 숫자의 n진법을 하고 parseInt(문자열, 숫자)를 하게 되면 해당 하는 문자열을 숫자진법으로 읽고 10진법으로 바꿔주는 역할을 하게 됩니다. 그래서 해당하는 문자열을 3진법으로 바뀐 수이기 때문에 3진법을 읽고, 그대로 10진법으로 바꿔주면 원래 목적인 10진법의 변환까지 마치게 되는 코드입니다.
'코딩 > 코딩테스트' 카테고리의 다른 글
[프로그래머스/JS] 최소직사각형 (0) | 2024.05.29 |
---|---|
[프로그래머스/JS] 이상한 문자 만들기 (0) | 2024.05.27 |
[프로그래머스/JS] 최대공약수와 최소공배수 (0) | 2024.05.23 |
[프로그래머스/JS]직사각형 별찍기 (0) | 2024.05.22 |
[프로그래머스/JS] 행렬의 덧셈 (0) | 2024.05.21 |