124 나라의 숫자

1,2,4 세 개의 숫자만 쓰는 124나라가 있습니다. 124나라에서 사용하는 숫자는 다음과 같이 변환됩니다.

10진법의 1 → 1
10진법의 2 → 2
10진법의 3 → 4
10진법의 4 → 11
10진법의 5 → 12
10진법의 6 → 14
10진법의 7 → 21

10진법의 수 N이 입력될 때, 124나라에서 쓰는 숫자로 변환하여 반환해주는 change124 함수를 완성해 보세요. 예를 들어 N = 10이면 “41”를 반환해주면 됩니다.

리턴 타입은 문자열입니다.

내 풀이

[파이썬]

def my_change124(n):
    li = ['4', '1', '2']
    s = ''
    while n > 0:
        s += li[n%3]
        if n%3==0: n -= 1
        n //= 3
    return s[::-1]

# 테스트를 위한 실행 코드
print(my_change124(13))

느낀점

규칙은 진즉 찾았지만 그걸 표현하는 것이 어려웠다(…)
4, 1, 2 순으로 리스트를 만들고 3으로 나눈 나머지 인덱스를 활용하면 될 것 같다고 생각하여 대수롭지 않게 여겼는데 풀다보니 큰 장애 요소가 존재했었다.
n이 3의 제곱이면 3의 배수인 조건까지 충족하게 된다. 즉, n//3=3의 배수, n%3=0을 반복하게 되어 9면 9//3=반복 3회, 결과값으로 144를 출력하는 큰 오답이 발생한다.
따라서 3//3=1 이라는 요인을 제거하고 3의 배수%3=0이라는 점을 고려하여 만약 n이 3의 배수이면 n=n-1 이라는 조건을 더하여 해결하였다.