[프로그래머스] 124 나라의 숫자 [연습 문제] [python] Level2

 

문제 설명

 

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.

  1. 124 나라에는 자연수만 존재합니다.
  2. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.


자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.

 

설계 및 구현

 

접근 방식

주어진 숫자를 "124"로 진법변환을 시키는 문제이다.

문제에서는 숫자를 "124"의 3진법으로 변환을 시키라고 말하고 있다.

 

my_solution

def convert(n):
    T = "124"
    n -= 1
    q, r = divmod(n, 3)
    if q == 0:
        return T[r]
    else:
        return convert(q) + T[r]
def solution(n):
        return convert(n)

1. convert(n)함수

   일단 T에 "124"문자열을 선언해 진법변환할 틀을 만들어 준다.

   보통의 진법은 0부터 시작하지만 문제에서는 1부터 시작이므로 n -=1을 해준다.

   n을 3으로 나눈 몫과 나머지를 구한다.

  ① 만약 q == 0이면 한자리수로 변환이 됬으니 자리에 맞는 T[r]을 반환해준다.

  ② q != 0 이면 convert(q) + T[r]을 통해 재귀적으로 2자리 이상의 문자열을 반환해주면 해결!

 

모범 solution

def change124(n):
    num = ['1','2','4']
    answer = ""

    while n > 0:
        n -= 1
        answer = num[n % 3] + answer
        n //= 3

    return answer

재귀함수대신 반복문을 사용하였다.

반복문을 쓰니 if -else구문을 쓰지 않고서도 구현이 가능한 코드를 만들 수 있다.

반응형

+ Recent posts