[프로그래머스] 코딩테스트 풀이 - 124 나라의 숫자

Reference : 프로그래머스 코딩 테스트 연습

문제 설명

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

입출력 예

n result
1 1
2 2
3 4
4 11

조건 분석

  • 나와야 하는 결과

    1
    자연수 n을 124나라에서 사용하는 숫자로 변환한 [값]
  • 문제를 풀기위해 주어진 데이터

    1
    2
    3
    4
    5
    # 문제 해결에 필요한 데이터

    1. 124 나라에서 사용된 10진법 데이터

    # 제한조건
  • 간단 알고리즘

    1
    1. 124나라에서 10진법을 변환하는 규칙을 찾는다.

나의 풀이

사용언어 : Python 3

주먹구구로 규칙을 찾아서 풀었다.
머리가 문제인가 경험이 문제인가..

1,2,4 총 3개의 값으로 계속 순환되고 있으므로

10진법 124나라
0 x 0
1 1 0
2 2 0
3 4 1
4 11 1
5 12 1
6 14 2
7 21 2
8 22 2
9 24 3
10 41 3
11 42 3
12 44 4
13 111 4
14 112 4
15 114 5

몫이 0일때까지 3으로 나눈다.

이때 3으로 나누기가 가능한 만큼 자릿수를 추가한다.

몫-1이 0이면 자릿수 1개
몫-1이 1~3이면 자릿수 2개
몫-1이 4~8이면 자릿수 3개

인 규칙을 발견할수 있다.

알고리즘

1
2
3
4
def solution(n):
answer = ''
pattern = [4, 1, 2]
chk = n
1
2
3
4
5
6
7
8
9
10
11
12
while True:
answer = str(pattern[(chk % 3)]) + answer
# 나누고 남은 나머지값이 들어간다. chk는 1,2,0 순으로 순환된다.
chk = int((chk - 1)//3)
# 자릿수를 파악한다.
n = int(n // 3)
# 나머지를 찾기위한 n의 값을 계산한다.
if chk == 0:
break
# 더이상 계산할 자릿수가 없을때 break

return answer

다른 풀이

n에서 1을 뺄 경우 쉬운 규칙으로 변하는 부분을 잘 캐치하였다.
chk 라는 변수를 따로 선언해서 삽질하지 않은 부분이 가장 크게 다른 부분.

1
2
3
4
5
6
7
8
9
10
def solution(n):
num = ['1', '2', '4']
answer = ""

while n > 0:
n -= 1
answer = num[n % 3] + answer
n = n // 3

return answer
공유하기