곽로그

[level2] 124나라의 숫자 본문

알고리즘/프로그래머스

[level2] 124나라의 숫자

일도이동 2020. 11. 12. 22:54
반응형

문제

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

 

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

 

programmers.co.kr

check

  1. 쉬운문제를 쉽게 풀지못한다

    • 이 문제를 처음에는 자리수를 구하고, N이 그 자리수에서 몇번째 수인지를 구한 다음, 모든 경우의 수를 구해서 해당 번째를 구하려고 했다.

    • 왜 이렇게 복잡하게 생각했냐하면, 진법을 생각하지 못했기 때문

  2. 진법!

    • 10진수를 2진수로, 3진수로 변환할 때를 생각해보면, 위 문제는 3진법 012 대신 412가 온거다

  3. 0과 0이 아닌 수

    • 진법에서 0의 의미는 자리수가 하나 증가하는 것을 의미한다.

    • 위 문제에서는 0 대신 4가 왔기때문에 윗자리수의 증가가 1번 늦게 시작한다. 즉 012의 3진법의 경우 1 -> 2 -> 10 -> 11 -> 12 -> 20 이렇게 가는데, 124의 경우에는 1 -> 2 -> 4 -> 11 -> 12 -> 14 -> 21 이렇게 하나씩 늦게 시작된다.

  4. 출력

    • 처음에는 ArrayList를 선언해서 나머지를 거꾸로 입력한다음 거꾸로 출력하려고 했다. 근데 그럴필요없이 문제에서 정답을 String으로 출력하라고 했으니 String을 이용하면 된다. answer += remain 으로 하고서 다시 거꾸로 출력할 필요 없이 answer = remain + answer라고 하면 된다. 또 어렵게 생각했다.

  5. 시간초과

    • 처음에 numbers를 int로 선언해서 시간초과가 났다.

comment

왤케 어렵게 생각하는 걸까.

풀이

10진법을 3진법으로 변환하는 문제와 같다. 다만 0이 4로 바뀌었기때문에 몫이 3으로 나누어 떨어지는 경우 몫에 -1 을 해줘야 한다. 

코드

class Solution {
    public String solution(int n) {        
      String[] numbers = {"4", "1", "2"};
      String answer = "";


      while(n > 0){
          int remain = n % 3;
          n /= 3;

          if(remain == 0) n--;

          answer = numbers[remain] + answer;
      }
        return answer;
    }
}

 

반응형
Comments