본문 바로가기
파이썬 알고리즘 코딩

124나라 (프로그래머스 level 2)

by 볼록티 2020. 10. 19.
728x90
반응형

 

    • 124 나라의 숫자

darklight

sublimevimemacs

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

입출력 예

nresult

1 1
2 2
3 4
4 11

 

def solution(n):
    
    basket = [] # 나머지 박스
    
    idx_d ={1:'1', 2:'2', 3:'4'}

    if n == 3:
        return '4'

    while True:
        
        if n < 3: # 종료조건
            basket.append(n)
            break
        else:
            basket.append(n%3)
            n = int(n/3)
    
    answer = []    
    penalty = 0
    
    while basket:
        
        if (basket[0] == 0) or (basket[0] == -1):
            answer.append(basket.pop(0)+3)
            
            if (len(basket)==1) and (basket[-1] == 1):
                break
            basket[0] = basket[0]-1

        else:
            answer.append(basket.pop(0))
    answer = answer[::-1]
    for i in range(len(answer)):
        answer[i] = idx_d[answer[i]]
    
    answer = ''.join(answer)

    return answer

 

알고리즘은 3진법을 생각했다. 

알고리즘은 대략 아래처럼 진행했다.

1. 처음 받은 매개변수 n을 3으로 나누어 나머지들을 모두 모은다.

2. 나머지가 0인 경우를 위주로 자리수 변경과 숫자를 3으로 매칭해준다.

3. 0이면 3으로 바꾸고 그 앞자리에 -1을 한다. 3진법이니 3이면 자리수에 +1 되는 것을 다시 자리수를 돌아가게 하는 것이다.

4. 아래의 그림으로 설명을 해야겠다..

나머지 구하고 이 나머지들을 가지고 다시 자리수 올라간걸 다시 원상복귀시키는 알고리즘인데, 조건문이 헷갈려서 구현에 시간이 많이 걸렸다.

 

 

 

 

고수들은 역시 코드 10 줄도 안되게.. 풀었다. . 가장 머리나쁜거 같은 느낌 많이 들게 하는 과목.... - -a

728x90
반응형

댓글