124 나라의 숫자(JAVA)

HwiJeongLee·2021년 5월 21일

프로그래머스

목록 보기
1/6

문제설명

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

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

10진수를 124 나라의 표현으로 바꾼 예시는 다음과 같습니다.

자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return하는 함수를 구현하시오.
(단, n은 500,000,000 이하의 자연수 입니다.)

풀이

이 문제를 보고 분석을 해본 결과 n % 3 의 값에 따라 숫자의 가장 뒷자리가 결정됨을 알 수 있었다.

n % 3 == 0 이면 뒷자리가 '4'
n % 3 == 1 이면 뒷자리가 '1'
n % 3 == 2 이면 뒷자리가 '2'

char [] numbers = new char [] {'4','1','2'};

이 부분은 문자 배열에 위의 표현을 위해서 0,1,2번째 인덱스에 각각 4,1,2를 문자로 선언해 둡니다.

또 그 앞자리는 n을 3으로 나눈 후 나온 값을 다시 124 나라의 진법으로 바꾸어 표현해줍니다.

여기서 주의할 점은 n이 3의 배수일 경우 n/3 - 1 값을 124 나라의 진법으로 바꿔야한다는 점 입니다.
(저는 이 부분을 처음에 생각하지 못 해서 애를 썼습니다.ㅎㅎ)

즉, n/3의 값이 1,2,3 이 되기 전까지는 계속 위의 방법을 반복하여야하므로 while 문을 사용해주었습니다.

처음코드

public String solution(int n) {

        char [] numbers = new char [] {'4','1','2'};

        String answer = "";
        int temp;

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

            if(temp==0)
                n--;
                // 3의 배수면 n = n / 3 - 1 이 되어야하므로.

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

하지만 결과는 다음과 같았습니다.

이에 String에서 '+'연산자를 사용하여 구현을 하니 효율성 부분에서 문제가 발생한다고 하여 StringBulider를 사용하였습니다.

StringBulider에 대해서는 따로 설명 게시글을 업로드 예정입니다.

최종코드

    public String solution(int n) {

        char [] numbers = new char [] {'4','1','2'};

        StringBuilder builder = new StringBuilder();
        int temp;

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

            if(temp==0)
                n--; // 3의 배수면 n = n / 3 - 1 이 되어야하므로.

            builder.insert(0,numbers[temp]);
        }
        return builder.toString();
    }

테스트 결과 성공하였습니다!

profile
초보 개발자의 개발 공간

0개의 댓글