https://school.programmers.co.kr/learn/courses/30/lessons/12899
124 나라의 진법을 이용해 진법변환을 하는 문제입니다.
1, 2, 4 세가지의 숫자만 가지고 있는 규칙은 0, 1, 2의 숫자로 표기하는 3진법과 유사한 형태를 가집니다. 이를 토대로 규칙을 유추해 보자면
이 나라의 진법을 나머지 기준으로 담을 배열 {"4", "1", "2"}
을 만들어줍니다.
여기서 특이한 점을 하나 발견할 수 있었는데, 6 % 3의 경우입니다.5를 예로 들자면
n % 3 = 2, n /= 3 = 1
이 되어 "1"+"2" 인데 6의 경우 "2" + "0"이 아닌 "14"의 형식으로 나타난다는 점이였습니다.
이 경우를 해결하기 위해 n/=3 에 -1을 해준다면
n = n/2 - 1
을 저장 -> "1"결론적으로 3으로 나누어 떨어지는 경우 몫에 -1을 해주어야 합니다. 나머지 부분은 코드를 보면 이해하실 수 있습니다.
class Solution {
public String solution(int n) {
String answer = "";
String[] arr = {"4", "1", "2"};
while(n > 0) {
int tmp = n % 3;
n /= 3;
if(tmp == 0) {
n--;
}
answer = arr[tmp] + answer;
}
return answer;
}
}