출처: 프로그래머스 코딩 테스트 연습, [프로그래머스] 124 나라의 숫자
1. 3의 배수가 될때 4가 출력되기 때문에 진법의 숫자에 해당하는 배열을 ['1', '2', '4']
가 아닌 ['4', '2', '1']
로 초기화한다.
2. n을 3으로 나누어 몫과 나머지를 구하고 나머지에 해당하는 인덱스를 진법 숫자 배열에서 꺼내어 answer의 앞에 넣는다.
3. n이 3의 배수여서 몫이 m이 되고 나머지는 0이 되는 경우는 다음 연산할 n에 몫을 넘겨주는 것이 아닌 몫 - 1을 넘겨준다. 이유는 4가 정확히 0을 뜻하는 것이 아닌 10을 뜻하는 것이기 때문에 다음 n으로 1이 같이 넘어가는 것과 같기 때문에 1을 빼주어 숫자를 맞추어 준다.
def solution(n):
"""
3진법
1 1
2 2
4 10
11 11
12 12
14 20
21 21
22 22
24 100
41 101
0, 1, 2
4, 1, 2
"""
base124 = ['4', '1', '2'] # 3진법과 같은데 숫자만 다른거 같음
answer = ''
while n > 0:
q, r = divmod(n, 3)
answer = base124[r] + answer
n = q if r != 0 else q - 1
return answer
진법문제를 최근에 풀어 바로 진법이구나 하고 풀었지만 실전에서 이런 문제를 만난다면 쉽지 않았을 것 같다.