이 문제의 규칙으로
숫자가 1, 2, 4가 반복되면 구성된다.
[1, 2, 4]
1 2 4
11 12 14
21 22 24
41 42 44
111 112 ~
ex) 2일 때
일의 자리를 보면, 1 2 4 중 1번째 1을 선택
ex) 3일 때
일의 자리를 보면, 1 2 4 중 2번째 4을 선택
ex) 6일 때
일의 자리를 보면, 1 2 4 중 2번째 4을 선택
십의 자리를 보면, 1 2 4 중 1번째 1을 선택
ex) 9일 때
일의 자리를 보면, 1 2 4 중 2번째 4을 선택
십의 자리를 보면, 1 2 4 중 1번째 2을 선택
ex) 10일 때
일의 자리를 보면, 1 2 4 중 0번째 1을 선택
십의 자리를 보면, 1 2 4 중 2번째 4을 선택
일의 자리를 공통적으로 보았을 때 : (현재 숫자 - 1) % 3
결과 번째 숫자를 선택한다. (1 - 1)
십의 자리를 공통적으로 보았을 때 : ((현재 숫자 - 1) // 3 - 1) % 3
결과 번째 숫자를 선택한다. (2 - 1)
그러면 백의 자리는 어떻게 될까? (3 - 1)번
(((현재 숫자 - 1) // 3 - 1) // 3 - 1) % 3
n번 자리는? (n - 1)번
(현재 숫자 - 1)
에 // 3 - 1
이 (n - 1)
번 붙고 마지막에 % 3
을 한다.
➡️ 각 자리는 (현재 숫자 - 1) % 3
나온 결과 값으로 1 2 4 중 하나를 선택하고
➡️ 다음 숫자는 // 3
으로 나누어 구한다.
➡️ 결국, 현재 숫자를 - 1
한 후, // 3
한 값이 0보다 큰 경우 반복문을 돌리면 된다.
(0인 경우 종료하면 된다.)
def solution(n):
answer = ''
while n > 0:
n -= 1
answer = '124'[n % 3] + answer
n //= 3
return answer