728x90
반응형
- 124 나라의 숫자
darklight
sublimevimemacs
Python3
문제 설명
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
- 124 나라에는 자연수만 존재합니다.
- 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
반응형
'파이썬 알고리즘 코딩' 카테고리의 다른 글
더맵게(프로그래머스 level 2) (0) | 2020.10.26 |
---|---|
문자열압축(프로그래머스 level2) (0) | 2020.10.22 |
프린터 (프로그래머스 level2) (0) | 2020.10.17 |
다리를 지나는 트럭 (프로그래머스 level2 ) (0) | 2020.09.06 |
문자열 다루기 기본 문제_level1 (0) | 2020.06.29 |
댓글