문제풀이/코딩테스트

프로그래머스 124 나라의 숫자 [Java]

gyungmean 2022. 5. 5. 01:09

문제출처

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

 

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

 

programmers.co.kr

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

처음에 3진법을 이용해서 풀어야겠다 싶었는데 진법을 이용해서 푸는 것은 안 됐다.

숫자를 3진법과 124나라 표기법으로 각각 표시해보면 

1 => 1 | 1

2 => 2 | 2

3 => 10 | 4

4 => 11 | 11

처럼 되기 때문에 불가능하다 마찬가지로 4진법의 경우에도 1 2 3 10와 같이 표기되기 때문에 맞지 않다.

 

규칙을 찾아보면 3의 배수에서는 마지막 자리가 4로 끝난다는 공통점이 있다.

3으로 나누었을 때 나머지가 1인 경우에는 1, 2인경우에는 2로 반복된다.

따라서 3으로 나누어 나머지를 확인하여 숫자를 계속해서 붙여나가면 완성이 된다.

그래서 우선 string배열을 만들어 "4" "1" "2"를 넣어줬다. 각각의 인덱스가 나머지랑 일치하도록.

 

7의 경우 7 % 3 = 1이므로 1을 우선 붙인다.

 

이 다음 단계에서는 7 / 3해주면 2 2 % 3 = 2이므로 2가 앞에 붙게된다.

 

그리고 3의 배수의 경우가 도저히 해결이 안돼서 결국 검색찬스를 썼다.

3의 배수를 /3해주면 다른숫자가 되어버려서 고민이었는데 이 경우 -1을 해주면 된다고 한다.

왜지?

하지만 어쨌든 그렇게 하니까 됐다...

 

이해가 가지 않더라도 실전에선 규칙을 빨리 찾아내는게 중요할거 같긴하다.