문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한 조건
n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예
입출력 예 설명
문제풀이
function solution(n) { let answer = ""; // while(n > 0){ // answer += (n % 3); // n = Math.floor(n / 3); // } answer = n.toString(3); //3진법으로 바꾸기 let reverse = ""; for(let i = answer.length - 1; i >= 0; i--){ reverse += answer[i]; } return parseInt(reverse, 3) }
메소드 활용
function solution(n) { n = n.toString(3) // 10진법 -> 3진법으로 변환 .split( "" ) //문자열을 배열로 변환 .reverse() //배열의 순서를 반전 .join( "" ) //배열을 문자열로 변환 return parseInt(n, 3)//3진법 -> 10진법으로 변환 }
문제 설명
0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.x의 모든 0을 제거합니다.
x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다.
예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다.0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.
제한 조건
s의 길이는 1 이상 150,000 이하입니다.
s에는 '1'이 최소 하나 이상 포함되어 있습니다.
입출력 예
입출력 예 설명
문제풀이
function solution(s) { let count = 0; //이진변환횟수를 카운트 let remove =0; //0이 제거된 개수를 카운트 while(s !== "1"){ //s가 "1"이 될 때까지 무한 실행 count++; let result = ""; // s에서 0이 제거되고, 1만 남은 문자열 for(let i =0; i < s.length; i++){ if(s[i] === "0"){ //"0"이라면 s에서 제거(=result 문자열에 담아두지 않는다.) remove++; continue; } // "1" 이라면 s에 추가(=result 문자열에 담아준다.) result += s[i] // "1" } s = result.length; //"0"이 제거된 문자열의 길이 s = s.toString(2); // 남은 문자열을 2진법으로 변환 } return [count, remove]; }
메소드 활용
function solution(s) { let [count, remove] = [0,0]; function recursion(){ if(s === "1"){ return [count, remove]; } count++; s = s.split("").filter( n => { if(n === "0") remove++; return n === "1" }).length; // console.log(s) s = s.toString(2); return recursion(); } return recursion() }
function solution(s) { let [count, remove] = [0,0]; function recursion(s){ if(s === "1"){ return [count, remove]; } count++; s = s.split("").filter( n => { if(n === "0") remove++; return n === "1" }).length; s = s.toString(2); return recursion(s); } return recursion(s) // console.log(s) }
실무에선 위와 같은 방법을 사용