728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/12899

 

코딩테스트 연습 - 124 나라의 숫자

 

programmers.co.kr

 

코드


function solution(n) {
    let answer = '';

    while (n > 0) { //n이 0이 아닐때까지 반복
        switch (n % 3) { //3으로 나눈 나머지가 각각 0,1,2인 경우에
            case 1:
                answer = "1" + answer; //10진수가 10인경우에는 맨처음 answer = '1' 그다음 switch문 돌면 answer = '4' + answer = '4'+'1' = '41'
                n = Math.floor(n / 3);
                break;
            case 2:
                answer = "2" + answer;
                n = Math.floor(n / 3);
                break;
            case 0:
                answer = "4" + answer;
                n = n/3 - 1; //3으로 나눈 나머지가 0인 경우에(case 0)만 3으로나눈몫에 -1을 해줌
                break;
        }
    }

    return answer;
}

 

후기


  • 직접 작성해본 변환표이다. 제일 처음 찾은 규칙은 각 10진수를 3으로 나눈 나머지가 1일 때는 1로 변환, 2일 때는 2로 변환, 0일 때는 4로 변환되는 것을 알 수 있었다. 그리고 찾은 두 번째 규칙으로는, 나머지가 0일 때 즉, 10진수가 3의 배수일 때만 몫에 어딘가 규칙이 어긋난 것 같은 느낌을 받았다. 10진수가 각각 3, 6, 9일 때, 몫이 0, 1, 2여야 규칙이 완성될 것 같았다
  •  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 그러므로 3으로 나눈 나머지가 1, 2인 경우(case 1, 2)에는 몫을 그대로 구하면 되지만, 나머지가 0인 경우(case 0)에는 3으로 나눈 몫에 -1을 해줘야 한다. 그렇게 해서 구한 n은 다시 while 문을 돌며 0이 아닐 때까지 반복하여 124숫자를 완성하게 된다 

+ Recent posts