관리 메뉴

코딩 기록 저장소

[프로그래머스/Python] 124 나라의 숫자 본문

프로그래머스/Lv.2

[프로그래머스/Python] 124 나라의 숫자

KimNang 2023. 3. 8. 11:42

문제 정보

제목 : 124 나라의 숫자

난이도 : Lv.2

사용 언어 : Python

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/12899

 

문제 설명

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

  1. 124 나라에는 자연수만 존재합니다.
  2. 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은 50,000,000이하의 자연수 입니다.

입출력 예

n result
1 1
2 2
3 4
4 11

나의 풀이

숫자를 더 나열하게되면 이렇게 됩니다.

10진법 124 나라
11 42
12 44
13 111
14 112
15 114
16 121
17 122
18 124
19 141
20 142

여기서 직관적으로 봤을 때 자연수 n이 3의 배수이면, 124나라 숫자는 4가 연관있다는 것을 발견했습니다. 그래서 이번 문제는 3이랑 관련이 있을 것이라고 생각했습니다. 그리고 3진법은 나머지가 0,1,2만 올 수 있고, 1,2만 취급하는 124나라에게 3진법이 잘 맞을것 같다는 생각이 들어 3진법의 특징을 이용하여 문제를 풀었습니다.

 

while문을 이용하여 n이 0이 아니면 반복합니다. tmp에 n을 3으로 나눈 나머지를 저장하고, if문을 이용하여 tmp가 0이라면 3의 배수인 것이므로 tmp는 4로 변경해준 후 n은 -1해줍니다. answer 리스트에는 tmp를 str로 변환해준 값을 추가합니다. n을 3으로 나눈 정수의 몫을 n에 저장하고 이 과정을 반복합니다. answer이 역순으로 저장되어 있기 때문에 reverse함수를 통해 뒤집은 후 join()함수를 사용해서 문자열로 변환하여 리턴합니다.

 

코드

def solution(n):
    answer = []
    
    while (n) :
        tmp = n % 3
        if ( tmp == 0) :
            tmp = 4
            n -= 1
        answer.append(str(tmp))
        n //= 3    
        
    answer.reverse()
    return ''.join(answer)