본문 바로가기
코딩테스트 연습

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

by 동배_ 2021. 8. 11.

https://programmers.co.kr/learn/courses/30/lessons/12899?language=python3 

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

처음 문제 해석 및 풀이 방법

1. 3진법이라 생각되어 3진법으로 변환한 후 거기 값에 맞는 (1이면 1, 2이면 2, 3이면 4) 값을 문자열로 추가함.

2. 반복문을 통해 자릿수를 변경하면서 n%3을 통해 그 자릿수의 들어갈 값을 넣어준다. 

3. n//3을 통해 자릿수를 변경한다(만약 십진수면 n//10하면백의자리-> 십의자리 ->일의자리)

4. return 값으로 answer을 반환한다.

 

내가 작성한 소스코드

def solution(n):

    answer = ''
    
    while n > 0: #n이 없어질때까지 
        n -= 1  # n 1차감 
        value = n%3 # 3진법이므로 n을 3으로 나눈 나머지를 계산 
        if value == 0:
            answer = '1' +answer
        elif value == 1:
            answer = '2' +answer
        elif value == 2:
            answer = '4' +answer
        n //= 3 #자릿수 내림

    return answer

while문을 통해 n을 -1씩 차감하고 그 값에 3을 나눈 나머지를 구해 나머지가 1이면 1, 2면 2, 3이면 4를 최상단 문자열에 추가한다.(큰숫자부터 하기 때문) 그후 n //=3을 통해 자릿수를 한칸 내린다. 

 

 

결론 및 고찰 

문제를 보자말자 3진법을 이용하여 푸는 것을 알았으나 처음에는 내가 주의깊게 생각하지 않은 나머지 n//3 으로만 값을 구해 이상한 값이 나와서 고민을 했었다. 그래서 코드를 다 지워보기도 하며 고민을 하다 자릿수를 내리는 방법에 대해 검색했고 현재 값에 -1을 하는 것이 올바른 것을 찾아냈다. 그리고 이 문제에 대해 고민을 하면서 더 짧은 방법이 있을 것 같아 구글링 해본 결과if 문을 사용하지 않고 answer = num[n % 3] + answer 문장으로만 값을 정하는 정말 간단한 방법이 있었다.

댓글