(Python, Java) 프로그래머스 - 124 나라의 숫자

[문제 링크]

Python 풀이

def solution(n):
    num = ['1', '2', '4']
    answer = ""

    while n > 0:
        n -= 1
        answer = num[n % 3] + answer
        n //= 3

    return answer

3진법이지만 1,2,4로 표현해야 한다.
3진법에서는 10진수 3이 오면 단위를 증가시키지만 124나라에서는 4가 와야 한다.
그렇다면 3진법 풀이에서 10진수가 3이오면 단위를 증가시키지 않기 위해서 해야 할 일은 10진수 3이오면 3이 아니게 만들면 된다.
애초에 계산은 3진법으로 해야하기 때문에 나눠주는 수를 변경할 수는 없다.
따라서 들어오는 10진수의 값에 변화를 줘야 한다.
그 결과물이 10진수를 1씩 빼주고 그에 따라 124에 맞추면 된다.

1부터 생각해보자.
1에 1을 빼주고 3으로 나눈 나머지는 0이다. -> 124 나라에서는 1이므로 인덱스 0위치에 1을 넣어둔다.
2를 생각해보자.
2에 1을 빼주고 3으로 나눈 나머지는 1이다. -> 124 나라에서는 2이므로 인덱스 1위치에 2를 넣어둔다.
3을 생각해보자.
3에 1을 빼주고 3으로 나눈 나머지는 2이다. -> 124 나라에서는 4이므로 인덱스 2위치에 4를 넣어둔다.

4를 생각해보자.
4부터는 1을 빼주고 나누는 과정에서 몫이 생긴다.
그럼 나머지를 구하는 과정은 그대로 진행하고 다음의 n를 몫으로 정해주면 된다.

개인적으로 자료구조도 사용하지 않고 그저 규칙을 찾아서 하는 문제이므로 그다지 주의깊게 볼 문제는 아닌 것 같다.

Java 풀이

class Solution {
    public String solution(int n) {
        String[] nums = {"1", "2", "4"};
        StringBuilder sb = new StringBuilder();

        while (n > 0) {
            n -= 1;
            sb.append(nums[n % 3]);
            n /= 3;
        }

        return sb.reverse().toString();
    }
}

© 2021. By Backtony