문제
내 코드
def solution(n):
temp = n
k = 0
while (temp > (3**(k+1))):
k += 1
temp = temp - (3**k)
arr = []
for i in range(k, -1, -1):
num = n // (3**i)
arr.append(num)
n = n % (3**i)
#문제 : 0이 없을 때까지 while문 돌려야함
while (True):
if (0 not in arr):
break
for j in range(len(arr)-1):
if arr[j+1] == 0:
arr[j+1] = 3
arr[j] -= 1
# 3을 4로 바꿔주고, 하나씩 문자열에 추가
answer = ""
for k in range(len(arr)):
if (arr[k] == 3):
arr[k] = 4
answer += str(arr[k])
return answer
풀이
- while문을 돌려서, 3의 k승으로 나누어서 자릿수를 구한다.
- for문을 돌려서, 리스트에 3으로 나눈 수를 추가한다.
- while문을 돌려서, 리스트에 0이 없을 때까지 0을 다른 수로 바꿔준다.
- for문을 돌려서, 3을 4로 바꿔주고, 하나씩 문자열에 추가한다.
효율적인 코드
def solution(n):
num_list = ['4', '1', '2']
answer = ""
while n > 0:
namugi = n % 3
n = n // 3
answer = num_list[namugi] + answer
if namugi == 0:
n = n - 1
return answer
solution(30)
피드백
- 나머지가 0인 것은 바로 4로 추가해줘서, 3을 4로 바꾸는 과정을 생략
- 새로운 숫자를 앞에 추가해주는 방식으로, 미리 뒷 숫자들을 최소 1 이상 확보 가능