def solution(n):
answer = ''
number = "124"
while n>0 :
n -= 1
answer = number[n%3] + answer
n = n // 3
return answer
1. 각 index를 1을 빼준 후, 3으로 나눈 나머지를 '124'의 index로 가진다.
ex) 30번째 -> 29 -> 124[2] = 4 ➡︎ 4
2. 위에서 나눈 몫에 대해 1을 빼고 3으로 다시 나눈 나머지를 '124'의 index로 가지며 앞의 값의 앞쪽에 붙여준다.
ex) 9 -> 8 -> 124[2] = 4 ➡︎ 44
3. 2번을 반복한다.
ex) 2 -> 1 -> 124[1] = 2 ➡︎ 244
✔︎ 1을 빼는 이유
: 인덱스는 0부터 시작하기 때문
1 빼주지 않으면 10진법에서 1의 경우, 나머지가 1이 나오므로 124[1] = 2가 답으로 나오게 된다.
재귀함수를 이용하여 풀기 (다른 분의 풀이)
def solution(n):
if n<=3:
return '124'[n-1]
else:
q, r = divmod(n-1, 3)
return solution(q) + '124'[r]
divmod 함수(숫자를 두개 입력 받아서 몫과 나머지를 튜플 형태로 반환하는 함수)와 재귀함수를 이용하는 것이 포인트 !
'Algorithm > Programmers' 카테고리의 다른 글
[Python] 프린터 (0) | 2021.04.22 |
---|---|
[Python] 다음 큰 숫자 (0) | 2021.04.19 |
[Python] 자연수 뒤집어 배열로 만들기 (0) | 2021.04.17 |
[Python] 문자열 다루기 기본 (0) | 2021.04.16 |
[Python] 완주하지 못한 선수 (0) | 2021.04.12 |