숫자를 오직 1, 2, 4로만 표현하는 나라가 있다 10진수 n이 주어졌을 때 n을 124 나라의 숫자로 변환한 결과를 리턴하시오.
124 나라의 숫자는 모든 숫자를 세 개로만 [1, 2, 4] 표현한다는 점이 삼진법[0, 1, 2]과 같다.
하지만, 0보다 큰 자연수 n을 각자의 표현 방식으로 나타낼 때
삼진법의 맨 앞자리에는 0이 올 수 없지만
124 나라의 수는 맨 앞자리에 1이 올 수 있다.
ex) 길이가 2인 124 나라의 수 중 가장 작은 수는 [1, 2, 4]의 1을 활용한 11이지만,
삼진수 중 가장 작은 수는 [0, 1, 2]의 0을 활용한 00이 아니라 10이다.
십진수 | 삼진수 | 124나라의 수 |
1 | 1 | 1 |
2 | 2 | 2 |
3 | 10 | 4 |
4 | 11 | 11 |
5 | 12 | 12 |
6 | 20 | 14 |
7 | 21 | 21 |
8 | 22 | 22 |
9 | 100 | 24 |
따라서 자릿수를 계산할 때마다 -1을 해준 뒤 값을 구해야 한다.
(여러 번 해보면 이런 규칙이 찾아지긴 하는데 왜 이렇게 되는지 잘 모르겠음)
이를테면 9를 124 나라의 수로 변환한다면 다음과 같다.
124 나라의 수는 [1, 2, 4] 수가 세 개이므로 3으로 소인수분해를 한다.
( 이진수[0, 1]를 구하기 위해 2로 소인수 분해하는 것과 같음 )
9 - 1을 소인수 분해한다.
8을 3으로 나눈(3진수니까) 나머지 "2"를 인덱스로 사용하여 값을 구한다. [1, 2, 4]중 인덱스가 2이므로 "4"이다.
2 - 1을 소인수 분해한다.
1을 3으로 나눈 나머지 "1"을 인덱스로 사용하여 값을 구한다. [1, 2, 4]중 인덱스가 1이므로 "2"이다.
따라서 십진수 9는
124 나라의 수로 24이다.
파이썬으로 작성
def solution(n):
answer = ""
arr = ["1", "2", "4"]
while n > 0:
n -= 1
answer = arr[n % 3] + answer
n //= 3
return answer
'알고리즘, 자료구조' 카테고리의 다른 글
ArrayList,LinkedList 비교 (0) | 2022.07.01 |
---|---|
기능 개발 (0) | 2022.07.01 |
멀쩡한 사각형( 파이썬 ) - 프로그래머스 (0) | 2022.06.24 |
DFS와 BFS - 파이썬 구현 (0) | 2022.06.20 |
그래프 ( Graph ) (0) | 2022.06.20 |