규도자 개발 블로그

[프로그래머스/Level2/파이썬3(python3)] 124나라의 숫자 본문

알고리즘/풀이

[프로그래머스/Level2/파이썬3(python3)] 124나라의 숫자

규도자 (gyudoza) 2020. 5. 2. 17:34

[프로그래머스/Level2/파이썬3(python3)] 124나라의 숫자

문제

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

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

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

10진법124 나라10진법124 나라
11614
22721
34822
411924
5121041

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

제한사항

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

입출력 예

nresult
11
22
34
411

풀이

def solution(num):
    answer = ""
    while num:
        num, nam = divmod(num, 3)
        answer = '412'[nam] + answer
        if not nam:
            num -= 1
    return answer

설명

사실 문제만 봤을 땐 멘붕이 왔다. 왜 3이 4가 되고 4는 11이며 5는 12이지...? 평소 10진법 세상에서 살아왔기 때문일까. 그럼에도 불구하고 2진법, 8진법, 16진법 같은 경우엔 컴퓨터상에서도 많이 썼고 서로의 진수변환에 대해 공부했기 때문에 문제는 없었지만 이건 뭐... 아예 감도 안왔다. 그래서 다른 코드를 찾아 참고하였다. 사실 참고는 아니고 복붙이다... it홀릭님의 블로그에서 퍼왔다.

 처음엔 코드를 보되 설명만 듣고 내 힘으로 풀어보려 했다. 작은 수를 124 나라의 숫자 법칙으로 변경하는 데에는 성공했으나 수가 계속해서 커질 경우 반복해서 124규칙을 적용하는 방법을 끝끝내 찾지 못해 그냥 보고 이해하기로 했다. 이분은 아주 멋지게 몫이 남지 않을 때까지 연산을 반복하고 나머지가 0일경우 10진수에서 0이 들어오는 것처럼 여기에선 4가 들어와야 하는데 그것을 문자열 배열에서 [0]번째 인덱스를 찾게 하는 방법을 통해 해결하였다.

 예를 들어 여기에서는 3이 4가 되는데 3진수로 하면 10이 된다. 이 부분에 신경쓰면 될 것 같다.

Comments