프로그래머스 - 124 나라의 숫자

Park Suyong·2021년 11월 16일
1

개인 알고리즘

목록 보기
19/19

문제

  • 문제 설명

    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이하의 자연수 입니다.
  • 입출력 예시
    n result
    1 1
    2 2
    3 4
    4 11

문제 풀이

이 문제 푸는 데 엄청 오래 걸렸고 엄청 삽질했다..
풀이를 구글링 하여 참조했다.

내가 처음에 풀려고 했던 방식은 숫자 n이 주어지면 해당 숫자를 124 나라의 숫자로 변환할 때 자릿수를 먼저 파악한 다음, 현재 값과 자릿수가 막 바뀌는 지점의 값을 빼고 3으로 나눴을 때를 기준으로 구하려 했었다.

이 방식으로 계속 고집하다 보니 코드가 너무 난잡해졌고, 나중에 거의 해답에 가까워 왔을 때는 문제 풀이를 하기 어려운 정도까지에 이르게 됐다.

결국 다른 풀이 방식을 찾아보고자 했고 아래와 같은 풀이를 찾게 됐다.

class Solution {
    public String solution(int n) {
        String answer = "";
        String[] arr = {"4", "1", "2"};
        
        int num = n;
        while(num > 0) {
            int remainder = num % 3;
            num /= 3;
            
            if(remainder == 0) num--;
            answer = arr[remainder] + answer;
        }
        
        return answer;
    }
}

먼저, 주어진 숫자 n을 3으로 나눈 나머지를 구해 보면 1, 2, 0 순으로 반복된다. 1, 2, 4 순으로 순서를 맞춰야 하므로 (1 -> 1, 2 -> 2, 4 -> 0) 문자열 배열을 {"4", "1", "2"} 로 선언해 둔다.

그 다음, 주어진 숫자 값을 0보다 클 때까지 계속 나눠 나간다. 먼저, 나머지를 저장할 변수를 선언하고 주어진 숫자 값에 3을 나눈 값을 다시 저장한다. 앞서 선언한 문자열 배열과 같이 각 자릿수를 나눴을 때 나머지를 인덱스 값으로 활용해 1인지, 2인지, 4인지 알 수 있기 때문이다. 그리고 자릿수를 맞추기 위한 조건으로 나머지 값이 0일 때 숫자 값에서 1을 뺀다.

마지막으로, 반환해야 할 문자열에 원하는 값을 뒤에서 부터 추가하면 된다.

profile
Android Developer

0개의 댓글