최악의 경우 n이 5억이다. 따라서 하나씩 숫자를 올려가며 하는 것은 불가하다. 숫자가 1, 2, 4 세 가지만 존재하니까 n을 3으로 나머지 연산해보자.
나머지 연산으로 나온 숫자를 인덱스로 하는 124 나라의 숫자를 나타내는 배열을 만들자
String numbers = {"4", "1", "2"};
그렇다면 124나라의 숫자로 두 자릿수 이상은 어떻게 할까? 바로 나누기 연산을 통해 남은 숫자를 다시 위의 과정을 거치는 것이다. 이 때 나머지 연산의 결과 인덱스는 가장 뒤쪽부터 붙여나간다.
n = 5 일 때
1) n % 3 = 2
n = n / 3 = 1
2) n % 3 = 1
n = n / 3 = 0
답은 numbers[1] + numbers[2] = "12"
3으로 나누어 떨어지는 경우에는 다른 규칙이 하나 적용된다. 바로 n에 -1을 해주는 것이다.
class Solution {
public String solution(int n) {
String[] numbers = {"4", "1", "2"};
String answer = "";
int num = n;
while(num > 0){
int remainder = num % 3;
num /= 3;
if(remainder == 0) num--;
answer = numbers[remainder] + answer;
}
return answer;
}
}
"3으로 나누어 떨어지는 경우에는 다른 규칙이 하나 적용된다. 바로 n에 -1을 해주는 것이다."
해주는 이유를 알 수 있을까요?
3으로 나누어 떨어지지 않는 경우
4,5를 예를 들면 나누기 했을 때 1이 되는데 6이면 2가 되어서 4,5와 같이 몫을 일부로 1로 만들어주는걸까요?