124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
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();
}
테스트 결과 성공하였습니다!
