개발자/프로그래머스 알고리즘

코딩테스트 연습 - 3진법 뒤집기 | 프로그래머스 js ★★☆☆☆

YoungDogg 2022. 2. 7. 14:51

코딩테스트 연습 - 3진법 뒤집기 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 3진법 뒤집기

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수

programmers.co.kr

 

구현문제다

 


const solution = (n) => {
    let sum = 0;
    let nArr = [];
    
    //앞뒤 반전(3진법)
    while(n >= 3){
     nArr.push(n % 3);
     n = Math.floor(n / 3);
    }
    nArr.push(n);
    //console.log(`앞뒤반전 nArr:${nArr}, n:${n}`);
    
    // 다시 앞뒤 바꿔서, 계산의 편의를 위해
    let noZeroArr = [];
    for(let i = nArr.length-1; i >= 0; i--){
      noZeroArr.push(nArr[i]); 
    }
    //console.log(`noZeroArr:${noZeroArr}`)
    
    
    // 3진법을 10진법으로
    for(let i = noZeroArr.length -1; i >= 0; i--){   
      if(noZeroArr[i] !== 0){
        sum += noZeroArr[i] * Math.pow(3,i);
        //console.log(`noZeroArr[${i}] * Math.pow(3,${i}):${noZeroArr[i]} *${ Math.pow(3,i)}, i:${i}`); 
      }
    }
    //console.log(sum);
    return sum;
}