프로그래머스 연습문제
문제풀러 바로가기👇👇👇👇👇👇
https://programmers.co.kr/learn/courses/30/lessons/12899
문제풀이
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의 배수일 때만 다음 자리수를 증가시키지 않는 로직을 넣어주면 된다.