알고리즘, 자료구조

124 나라의 숫자

hs-archive 2022. 6. 25. 00:51

숫자를 오직 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 나라의 수로 변환한다면 다음과 같다.

 

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

 

 

 

 

 


https://programmers.co.kr/learn/courses/30/lessons/12899

 

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

 

programmers.co.kr

'알고리즘, 자료구조' 카테고리의 다른 글

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