어떻게든 패턴 찾고싶어서 공책 펴놓고 이것저것 다 써봤다.............
그렇게 찾은 패턴
십진수에서 3으로 계속 나누면서 생기는 나머지들 + 마지막으로 나눠지는 수를 이으면 삼진법 뒤집은 모양임
for (let i=0; n>=3; i++) {
arr.push(n%3)
n = Math.floor(n /= 3);
}
arr.push(n);
우선 삼진수로는 만들었다. 그런데 다시 십진수로 만드는 게 또 난관이다.
우선 내가 세운 식은,
arr[(arr.length-1)-j] * (3 ** j)인데,
//예시인 125의 3진수를 뒤집으면 22111이다.
let index = arr.length-1; //이라고 가정했을 때
//자릿수 * 3의 x제곱
arr[index-0] * (3**0) // 1 * 1 = 1
arr[index-1] * (3**1) // 1 * 3 = 3
arr[index-2] * (3**2) // 1 * 9 = 9
arr[index-3] * (3**3) // 2 * 27 = 54
arr[index-4] * (3**4) // 2 * 81 = 162
//옆의 값들을 모두 합치면 229가 된다.
그래서 결론은
function solution(n) {
let arr = [];
// 삼진수 배열로
for (let i=0; n>=3; i++) {
arr.push(n%3)
n = Math.floor(n /= 3);
}
arr.push(n);
// 십진수로
let index = arr.length -1;
let answer = 0;
for (let j=0; j<=index; j++) {
answer += arr[index-j] * (3 ** j);
}
return answer;
}
지금까지 푼 문제중에 제일 오래 걸리고 제일 재밌었음
다른 사람 풀이
const solution = (n) => {
return parseInt([...n.toString(3)].reverse().join(""), 3);
}
어떻게 이게 나온거지 ㅎ ㅏ 분석해봐야겠다. 세상에 똑똑한 사람들이 정말 많다!
n.toString(3) 은 n을 3진수 문자열로 반환하는 메서드다..^^! 하하!
그리고 parseInt()를 하면 십진수로 변환된다~!
'코딩 테스트 > test_javaScript' 카테고리의 다른 글
[코딩테스트/javaScript] 크기가 작은 부분 문자열 (0) | 2025.01.04 |
---|---|
[코딩테스트/javaScript]이상한 문자 만들기 (1) | 2025.01.03 |
[코딩테스트/javaScript] 최대공약수와 최소공배수 (0) | 2025.01.01 |
[코딩테스트/javaScript] 직사각형 별 찍기 (0) | 2024.12.31 |
[코딩테스트/javaScript] 행렬의 덧셈 (0) | 2024.12.30 |