[5/30] 124 나라의 숫자

이경준·2021년 5월 30일
0

코테

목록 보기
24/140
post-custom-banner

문제

내 코드

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

풀이

  1. while문을 돌려서, 3의 k승으로 나누어서 자릿수를 구한다.
  2. for문을 돌려서, 리스트에 3으로 나눈 수를 추가한다.
  3. while문을 돌려서, 리스트에 0이 없을 때까지 0을 다른 수로 바꿔준다.
  4. 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 이상 확보 가능
profile
The Show Must Go On
post-custom-banner

0개의 댓글