ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스 Lv.2] 124 나라의 숫자 java + 시간초과 해결
    DEV/알고리즘 2020. 10. 7. 16:48

    문제설명

    124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다

    - 124 나라에는 자연수만 존재합니다.
    - 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

    예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
    10진법 124나라 10진법 124나라
    1 1 6 14
    2 2 7 21
    3 4 8 22
    4 11 9 24
    5 12 10 41
    자연수 n이 매개변수로 주어질 때,
    n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.

    제한사항

    • n은 500,000,000이하의 자연수 입니다.

     

    풀이방법이 생각나지 않아 구글링을 통해 풀었는데 정확성테스트는 통과했지만

    효율성 테스트에서 시간초과가나 통과하지 못했다.

    String에 '+' 연산을 시켜서 그런거같다.

    StringBuilder를 사용하니 통과할 수 있었다.

     

    Solution

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public class Solution {
        
        public String solution(int n) {
            int nmg = 0;
            StringBuilder sb = new StringBuilder();
            
            while(n>0) {
                //1,2,4 숫자가 3개이므로 3으로나눠서 규칙을 찾는다.
                nmg = n%3;
                n = n/3;
                
                //3%3=0 나머지가 0일때
                //124나라는 3이 없으므로 4로 치환
                //몫을 -1해주고 위와 같은 과정을 거친다
                if(nmg==0) {
                    nmg = 4;
                    n -= 1;
                }
                
                //연산의 결과값은 뒤로 붙이기
                //answer = nmg + answer 이 연산이 시간초과오류를 내서 아래와 같이 바꿔주었다.
                sb.insert(0, nmg);
                
            }
            System.out.println(sb);
                    
            return sb.toString();
        }
     
    }
    cs

     

    * StringBuilder메소드 append와 insert의 차이 *

    append() : 문자열 데이터 끝에 문자의 형태로 추가

    insert() : 첫번째 인자 - 삽입될 위치 (0이 맨 앞을 의미 문자가 삽입될 위치), 두번째 인자 - 삽입될 문자

     

     

    다른사람풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Solution {
      public String solution(int n) {
          String[] num = {"4","1","2"};
          String answer = "";
     
          while(n > 0){
              answer = num[n % 3+ answer;
              n = (n - 1/ 3;
          }
          return answer;
      }
    }
    cs

     

    배열에 "1","2","4"를 넣어서 풀이하였다.

    아이디어가 좋고 훨씬 간결하다.

    댓글

Designed by Tistory.