반응형
문제
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
의식의 흐름
- 진수 표현을 어떻게 하는가? = 제곱근으로 한다.
- 3진수 표현을 하려면 어떻게 할까? = 3으로 나눈 몫과 나머지를 이용한다.
- for 문과 배열을 통해서 3진수의 자리에 맞는 숫자를 넣어준다.
초기 코드
function solution(n) {
var answer = 0;
let x = 0;
let y = n;
while(y >= 3){
x = x+ 1;
y = parseInt(y / 3);
}
let tmp_arr = []
let reserve_arr=[]
for(let i =0; i < x+1 ; i ++){
tmp_arr.push(0);
reserve_arr.push(0);
}
let z = n
for ( let j = 0; j < x; j++){
if (z >= Math.pow(3, x-j)){
z = z - Math.pow(3, x-j)
if (z >= Math.pow(3, x-j)){
z = z - Math.pow(3, x-j)
tmp_arr[j] = 2
} else{
tmp_arr[j] = 1
}
}
}
tmp_arr[x] = z
for(let q =0; q < x+1;q++){
reserve_arr[x-q] = tmp_arr[q];
}
for(let w =0; w < x+1;w++){
if (reserve_arr[w] !=0 ){
answer = answer + (Math.pow(3, x-w)*reserve_arr[w])
}
}
return answer;
}
문제점 : Math.pow를 통해서도 지수를 나타낼 수 있었지만, 더 쉬운 방법이 있었다.
더 쉬운 방법이 있는데 이용하질 못했다.
다른 사람의 풀이
방법1.
const solution = (n) => {
return parseInt([...n.toString(3)].reverse().join(""), 3);
}
방법2.
function solution(n) {
return parseInt(n.toString(3).split('').reverse().join(''),3)
}
toString()으로 10진수를 특정 지수로 변환할 수 있다는 점과,
parseInt를 통해 특정 지수를 10진수로 변환 할 수 있다는 점만 알고 있었다면
풀수 있는 문제였다.
반응형
'코딩테스트' 카테고리의 다른 글
[프로그래머스] level1. 두 정수 사이의 합 (javascript) (0) | 2021.04.09 |
---|---|
[프로그래머스] level1. 같은 숫자는 싫어 (javascript) (0) | 2021.04.09 |
[프로그래머스] level1. 체육복 ( javascript) (0) | 2021.04.08 |
[프로그래머스] level1. 모의고사 (javascript) (0) | 2021.04.06 |
[프로그래머스] level1. 완주하지 못한 선수 (javascript) (0) | 2021.04.06 |