[프로그래머스]124 나라의 숫자 (Python3)

Song_Song·2021년 4월 5일
0

문제 설명

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

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

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

10진법 124 나라 10진법 124 나라
1 1 6 14
2 2 7 21
3 4 8 22
4 11 9 24
5 12 10 41

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

제한사항

n은 500,000,000이하의 자연수 입니다.

나의 첫 번째 풀이

숫자를 하나하나 써보면서 규칙을 찾아 보았다.
1 = 1
2 = 2
3 = 4.....

3을 주기로 숫자가 변하더라.
3으로 나눈 나머지가 1이면 몫10 + 1,
3으로 나눈 나머지가 2이면 몫
10 + 2,
3으로 나누어 떨어지면 (몫-1)*10 + 4
라는 규칙을 찾았다.

구현에 수많은 시행착오를 겪다가 결국 재귀로 해결하였다.

def solution(n):
    answer = str(div(n))
    return answer

def div(num):
    if num == 1:
        return 1
    elif num == 2:
        return 2
    elif num == 3:
        return 4
    
    else:
        dividedNum = num % 3
        if dividedNum == 1:
            return div(num//3)*10 + 1
        elif dividedNum == 2:
            return div(num//3)*10 + 2
        else:
            return div((num//3)-1)*10 + 4

나의 두 번째 풀이

단순히 while 문으로 간단하게 풀 수도 있다. 재귀를 사용하는 것처럼 탈출식을 설정하지 않아도 돼서 더 간편하게 풀 수 있다.

def solution(n):
    ans = ''
    while n > 0:
        rest = n % 3
        if rest == 1 or rest == 2:
            ans = str(rest) + ans
            n = n // 3
        elif rest == 0:
            ans = '4' + ans
            n = n //3 -1
    return ans
profile
성장을 위한 정리 블로그

0개의 댓글