[ Programmers / CodingTest / Python ] 124 나라의 숫자

황승환·2021년 10월 31일
0

Python

목록 보기
19/498

문제 설명

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은 500,000,000이하의 자연수 입니다.

입출력 예

n	result
1	1
2	2
3	4
4	11

접근 방법

규칙을 찾아보려고 노력을 많이 하였다. 그러다가 숫자를 3개만 사용한다는 점에서 3진법으로 나타내면 되겠다는 생각을 했다. 그러나 3진법을 이용하면 0,1,2로 수를 나타내게 된다. 0이 나오는 경우는 3으로 나눈 나머지가 0일 때이고, 0을 사용하지 않고 표현하려면 몫을 1 내리고, 나머지를 4로 바꾸어 표현하면 된다는 결론이 나왔다.

  • n을 3으로 나눈 나머지값을 담을 result 배열을 정의한다.
  • n이 0이 될 때까지 while문을 반복한다. while문 안에서는 n을 3으로 나눈 나머지 값을 result에 넣는데 이때 n을 3으로 나눈 나머지 값이 0이라면 result에 0이 아닌 4를 넣는다. 이때 n은 1만큼 빼준다. (몫을 1 내렸기 때문)
  • n을 3으로 나누는 것을 반복하는 것을 표현하기 위해 n은 n//3의 값으로 갱신된다.
  • 3진법을 나타내려면 나머지를 담은 배열을 거꾸로 보여줘야한다. 그러므로 answer에 result배열을 거꾸로 넣어준다.

solution.py

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

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글