[프로그래머스] 3진법 뒤집기

JINSUNG LEE·2021년 8월 9일
0
post-thumbnail
post-custom-banner


function solution(n) {
    let memo = []
    // 0부터 9까지는 뒤집을 경우 1이 나와야함
    if(n < 10){
        return 1;
    }
    
  	// memo 배열에 나머지를 계속 추가
    while(parseInt(n) !== 0) {
    	// 최종 나머지는 무조건 1 or 2 밖에 안나옴
        if(n === 1) {
            memo.push(1)
            break;
        } else if(n === 0) {
            memo.push(2)
            break;
        }
        
        memo.unshift(parseInt(n % 3))
        n = n / 3        
    
    }
    
  	// 배열 뒤집는 메서드 
    let newMemo = memo.reverse()
    let result = 0
    let count = 0
    
    for(let i = newMemo.length - 1 ; i >= 0; i--) {
        if(newMemo[count] === 0) {
            count++
            continue;
        }
        result = result + (memo[count] * 3**i)
        count++
    }
    return result
}

이번 알고리즘을 먼저 알기 위해선 위의 3진법 풀이를 알고 있어야 코드를 작성할 수 있다.

만일 45라는 10진수 숫자가 줄어질 경우 3진법으로 1200이 나오지만 설명란에서는 0021로 뒤집어야 한다.

memo 배열에 저장된 값을 reverse() 메서드를 통해 바로 뒤집을 수가 있다.

또한 1의 자리 숫자는 뒤집을 경우 무조건 1이 나오는게 특징이므로 if(n < 10) 로 처리하였다.

모범답안


const solution = (n) => {
    return parseInt([...n.toString(3)].reverse().join(""), 3);
}

!!! 😡 !!!

이제 모범답안 코드만 보면 화가 치밀어 오른다.

본인은 저 코드 구현하는데 몇 십줄이 줄줄 나왔는데, 고작 한줄이라니...

toString 메서드가 진법으로 구현할 수 있다는 거에 오늘도 충격을 먹었다.. ㄷㄷ

profile
https://californialuv.github.io/Tech_Blog 이사 갔어용 🌎 🚀
post-custom-banner

0개의 댓글