코딩테스트 준비/기타 문제들

프로그래머스 124나라 - 파이썬

갑자기 내리는 비 2021. 6. 10. 15:56
 

코딩테스트 연습 - 124 나라의 숫자

 

programmers.co.kr

 

124나라에는 1,2,4만을 이용해서 숫자를 표현합니다. 즉, 10을 41로 표현합니다.

 

이 문제를 풀기 전 이 문제를 어떻게 해결할지 생각해보겠습니다.

1. 현재 124나라에는 숫자의 자리수를 표현할 때 3가지의 숫자만 사용합니다. => 3진수 표현일 것.

2. 이 나라에는 0이라는 숫자가 없습니다. => 그에 따른 처리방법 필요

 

변환되는 모습을 확인해보겠습니다.

10진수 :  1  2   3   4   5   6   7   8    9   10   11
 3진수 :  1  2  10  11  12  20  21  22  100  101  102
  변환 :  1  2   4  11  12  14  21  22   24   41   42

관찰해보면 3진수에서 124나라 표기법으로 변환할 때 1은 1으로, 2는 2로, 10은 4로 변환되는 모습을 확인할 수 있습니다.

10이라는 숫자가 4로 변환되는 모습이 보이는데, 0이라는 숫자가 없어 자리수를 빌려오는 모습입니다. 

3이라는 숫자를      3진수로   ->  10

3이라는 숫자를 124표현으로 ->    4

6이라는 숫자를      3진수로   ->  20

6이라는 숫자를 124표현으로 ->  14

9이라는 숫자를      3진수로   ->  30

9이라는 숫자를 124표현으로 ->  24

 

관찰한 결과를 바탕으로 코드를 작성하겠습니다.

 

코드의 순서는 입력받는 10진수를 3진수로 변환한 후, 124나라의 표기법으로 변환하겠습니다.

def solution(n):
    answer = ''
    
    # 3진수로 변환
    while n>=1:
        answer = str(n%3) + answer
        n = n//3
    
    while True:
       # 입력받은 숫자에 0이 있다면 124표기법이 아니므로 게속 변환합니다.
       if '0' in answer:
            # 04가 아닌 그냥 4로 바꾼다면 자리수가 없어집니다.
            answer = answer.replace('10','04')
            answer = answer.replace('20','14')
            answer = answer.replace('40','24')
            
            # 04일 경우 앞자리수를 제거해줘야합니다.
            answer = answer.lstrip('0')
            
        # 모든 숫자가 1,2,4로 변환되었다면 반복문을 종료합니다.
        else:
            break
        
    return answer