삼진법으로 대체 어떻게 뒤집지 하고 숫자가 3의 i승과 3의 i+1승 사이에 있으면 일단 3의 i에 1을 더하고 ,,,, 나머지도 이런 식으로 구해야하나 하고 고민하다가 결국 구글링했다. 자바스크립트 정답을 보려던건 아니고 어떻게 구하는 규칙?방법이 있나 싶어서 검색한건데 자바스크립트로 진수 변환하기를 봐버렸고....
function solution(n) {
console.log(n.toString(3)) // 1200
}
solution(45);
toString() 하면 그 숫자의 진법으로 변환되어서 나오는데 toString이? 대체 원리가 뭐지
숫자 및 BigInts의 경우 toString()은 선택적으로 기수(radix)를 매개변수로 취합니다.
기수의 값은 최소 2부터 36까지입니다.기수를 이용함으로써 10진수를 (1, 2, 3, 4, 5...) 다른 진수로 변환할 수 있습니다.
라고 MDN에 써있는데 왜인지는 모르겠다. toString은 내가 알기론 문자열로 변환하여 반환하는 메서드인데.
function solution(n) {
console.log(n.toString(3)); // '1200'
n = n.toString(3);
console.log(parseInt(n,3)); // 45
}
solution(45); // 7
parseInt를 쓰면 다시 10진수로 되돌릴 수 있다.
parseInt() 함수는 문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의
정수를 반환합니다.
출처 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/parseInt
뒤집는 방법! for문 i를 거꾸로 쓰기
n이 3진법으로 이뤄진 숫자고 10진법으로 바꿔줘.
reverse 는 자주 쓰일 것 !
이진 변환 반복하기
function solution(s) {
var answer = [];
let count = 0;
let remove = 0;
while(s!=="1") {
count++;
let temp = ""; // 숫자 1만 담는 문자열 변수
for(let i =0; i< s.length; ++i) {
if(s[i]==="0") {
remove++;
continue;
}
temp+=s[i];
}
s = temp.length;
s = s.toString(2);
}
return [count, remove];
}
while 대신 쓸 수 있는 것 - recursion(재귀함수)
1. 원하는 결과가 나올때까지 자기 자신을 무한하게 실행하는 함수
2. while 반복문을 대체해서 사용할 수 있다.
카운트 변수를 따로 만드는 게 아니라, count를 매개변수로 받을 수도 있다.