Python/알고리즘 문제풀이

[프로그래머스 연습문제] 124 나라의 숫자

gakko 2022. 2. 4. 12:19

프로그래머스 연습문제

문제풀러 바로가기👇👇👇👇👇👇

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

 

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

 

programmers.co.kr

 

문제풀이


124나라의 숫자는 기본적으로 3진수와 비슷하다.

3진법에서는 숫자를 0, 1, 2 순서로 표현한다면 124나라에서는 4, 1, 2 순서대로 숫자를 표기한다.

 

그런데 약간 다른 점이 있다.

1의 자리 숫자일 때, 3의 배수일 때는 일반 3진법 표기와 다르게 표기된다는 점이다.

 

-3의 배수가 아닐 때

10진법 3진법 124나라
1 1 1
5 12 12
7 21 21

3진법과 124나라의 표기가 동일하다는 것을 확인할 수 있다.

 

 

-3의 배수일 때

10진법 3진법 124나라
3 10 4
6 20 14
9 100 24

3의 배수일 때는 3진법에 의하면 다음 자리수를 증가시켜야하는데 (Carry가 발생)

124나라에서는 증가시키지 않는다는 걸 알 수 있다. 

6의 경우에는 3진법과 같다면 24이 되어야 하는데 14가 되어있는 것으로 보아

(다음자리수-1)로 표기되어있는 걸 알 수 있다.

 

이것을 확장해서 십의 자리수까지 살펴보자.

10 이라는 숫자를 예로 들어보겠다.

10 / 3 = 3 ... 1
3 / 3 = 1 ... 0

===> 101

3진법으로 표현한 결과는 위와 같다.

하지만 124나라의 표기법은 다르다.

10 / 3 = 3 ... 1   ==> 몫인 3은 3의 배수이므로 다음 자리수 증가시키지 않음
3 / 3 =  1 ... 0   

=====> 01
0은 4이므로  ==>  41

 

 

 

코드


def solution(n):
    num = ["4", "1", "2"]
    answer = ""
    while n > 0:
    	# 3진법 논리
        answer = num[n % 3] + answer
        
        # 3의 배수일 경우 다음자리수를 증가시키지 않음
        n = (n // 3) - (n % 3 == 0)
    return answer
  • 기본적으로 3진법의 논리를 이용한다.
  • 3진법의 논리에 3의 배수일 때만 다음 자리수를 증가시키지 않는 로직을 넣어주면 된다.