프로그래머스 124나라의 숫자

Jooni·2020년 12월 7일
0

알고리즘

목록 보기
7/7

문제 설명

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
124 나라에는 자연수만 존재합니다.
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

해설
3진법으로 풀면 될거 같은데 그렇게 쉽게도 풀리는게 아닌 문제였다.
가장큰 힌트는 3진법과 124나라의 공통점과 차이점이다

공통점 : 3가지 수를 사용한다.
3진법 -> 1,2,0
124나라 -> 1,2,4

차이점 :
3진법은 3을 표현하기 위해서 0을 사용, 124나라는 4를 사용하게 된다. 그러나 3진법에서 3을 표현할 시 0혼자 등장하지 못한다. 앞에 1이 들어가서 10<-으로 표기가 되야 한다. 이점이 바로 차이점이다.

1,2,3 을 {1,2,4}로 표현하기 전에 3진법으로 풀면 1,2,10 이다. 3은 10으로 두자리가 된다.
하지만 124나라 기법으로 하면 두자리가 아니고 3은 4<-가 된다.
이것을 유의하기만 하면 되는데

풀이

  • 숫자 n이 3보다 크고 3으로 계속 나누어 지는지 체크한다.
    이 이유는 3진법으로 변환하기 위해서이다.
  • 숫자 n을 3으로 나눈 나머지가 0인지 본다. - >3, 9, 27 등 3의 n제곱들인지 체크하기 위해서이다.
    이 숫자들을 3진법으로 표현 하면
10진법124 나라3진법
3410
924100
272241000

n이 3으로 나누어 떨어질 때

  • n이 3으로 나누어 떨어진다면, (3진법에서는 0<-, 124나라에서는 4<-)를 리스트에 저장.
  • n이 3으로 나누어 떨어진다면, n = n-1 (n이 3이라면 ➡️ n = 2 )
  • n 을 3으로 나눈 몫으로 다시 저장 =>while문 반복

n이 3으로 나누어 떨어지지 않을 때🙅‍♀️❌

  • n %3 나머지를 리스트에 저장
  • n 을 3으로 나눈 몫으로 다시 저장 =>while문 반복

.
.
최종 몫이 0이 아니면 몫을 리스트에 저장

자 이제 리스트에 저장 된 것을 거꾸로 꺼내어서 [4,1,2] 순서에 맞춰서 answer에 재저장 후 출력.

내 솔루션

def solution(n):
    nation = [4, 1, 2]
    li = []
    if n > 0:
        temp = n
        while temp // 3 > 0:
            if temp % 3 == 0:
                li.append(temp % 3)
                temp = temp - 1
            else:
                li.append(temp % 3)
            temp = temp // 3
        if temp != 0:
            li.append(temp)


    answer = []
    for i in li[::-1]:
        if i == 0:
            answer.append(str(nation[i]))
        elif i == 1:
            answer.append(str(nation[i]))
        elif i == 2:
            answer.append(str(nation[i]))

    return ''.join(answer)
profile
이해가 안돼시거나 질문이 있으신 분들은 댓글로 남겨주세요. 성심성의껏 응하겠습니다!

1개의 댓글

comment-user-thumbnail
2022년 4월 5일

n 이 3으로 나누어떨어진다면 n-1 을 하는데 어떻게 이 방법에 도달하신건가요? 전 생각이 안나더라구요

답글 달기