자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
이 코드가 왜 실패인지 당최 이유를 모르겠다.
function solution(n) {
var answer = 0;
let remainN = 0; //나머지, n은 몫
let tmpN="";
let multiN = 0; // 제곱하여 곱해줄 수
while(n>0){
remainN = n%3;
n = parseInt(n / 3); // 정수로 변환
tmpN += remainN;
}
n = parseInt(tmpN);
while(n>0){
remainN = n % 10;
// 정수로 변환
n = parseInt(n / 10);
answer += remainN*(3**multiN);
multiN++
}
return answer;
}
Number 의 MAX 값보다 커서 안되는 것이다.
마지막 테스트 케이스 값은
3진법 뒤집기 : 78413450 -> 12110112211000212
수 뒤집기 : 12110112211000212 -> 21200011221101121
10진법 전환: 21200011221101120 -> 110105529
이 과정에서 21200011221101121 가 MAX를 넘어서
21200011221101120 으로 저장되는 것이다.
내 로직 자체가 잘못된 것은아니었다.
똑같은 코드를 파이썬으로 해보았더니 되더라..
def solution(n): #자바스크립트에서 내가 짠거랑 똑같이 적었는데 되더라..... 걍 MAX int 문제인걸로
num = n
answer = 0
remainN = 0
tmpN = ''
multiN = 0
while num > 0 :
remainN = num %3
num = num // 3
tmpN += str(remainN)
num = int(tmpN)
while num > 0:
remainN = num % 10
num = num // 10
answer += remainN * (3**multiN)
multiN+=1
return answer
숫자를 문자열로 변환하여 반환한다. 진법을 나타내는 2~36 사이의 정수값을 인수로 전달할 수 있다. 인수 생략시 기본값 10진법이 지정된다. // radix는 밑
전달 받은 문자열을 전달 받은 radix로 분석한 정수를 반환한다
function solution(n) {
let answer = n.toString(3).split("").reverse().join("");
return parseInt(answer, 3);
}
근데 왜 위의 저 코드는 안되는지 당최 모르겠다.
// 틀렸던 함수
function solution1(num) {
var answer = 0;
let remainN = 0; //나머지, n은 몫
let tmpN = "";
let multiN = 0; // 제곱하여 곱해줄 수
while (num > 0) {
remainN = num % 3;
num = parseInt(num / 3); // 정수로 변환
tmpN += remainN;
}
// tmpN = '21200011221101121'
num = parseInt(tmpN);//Number의 MAX 값을넘음
// 21200011221101120 (1 작게 들어감)
while (num > 0) {
remainN = num % 10;
num = parseInt(num / 10); // 정수로 변환
answer += remainN * 3 ** multiN;
multiN++;
}
return answer;
}
//메서드를 이용한 풀이
function solution2(n) {
let answer = n.toString(3).split("").reverse().join("");
//answer = '21200011221101121'
return parseInt(answer, 3);
}
//함수 2개 호출 비교
console.log(solution1(78413450));//110105529
console.log(solution2(78413450));//110105530
solution1 과
solution2 를 비교해보라