문제
https://school.programmers.co.kr/learn/courses/30/lessons/12899
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
입출력

해설
124만 사용하여 n을 표현하여라.
문제를 잘 읽다보면 진법에 관한 문제라는 것을 단번에 파악할 수 있다.
또한 3가지의 숫자만 이용하여 n을 표현하는 것이므로 3진법이라는 것도 유추해낼 수 있다.
하지만 여기서 문제는 정확하게 3진법이 아니기 때문에 살짝 고려해야 되는 사항이 있다.
0은 존재하지 않는다.
1, 2, 4만 이용하여 n을 나타내야 되는데, 우리가 진법을 만드는 방법은 다음과 같다.
n진법을 만든다고 하면
주어지는 숫자를 N이라고 하자.
그러면 다음과 같은 동작을 한다.
N := 주어지는 숫자
반복 N > 0:
나머지 = N % n
N = N / n
나머지들을 모아서 역순을 만들면 해당하는 N이라는 숫자를 n진법으로 나타낼 수 있다.
우리는 이를 통해서 3진법을 만들 수는 있는데 중요한 건 0이라는 숫자는 존재하지 않는다.
고로 0이 나오면 올리지 않고 4로 놔두고 나뉘는 수를 하나 줄이면 된다.
예를 들어 9라는 숫자를 보자.
9는 3진법으로 나타내면 '20' 이라고 할 수 있다.
이것은 '3^1 * 2 + 3^0 + 0' 이라고 볼 수 있는데 여기서 우리는 0이라는 숫자는 존재하지 않기 때문에
다음 승에 있는 숫자를 하나 줄이고 현재 0을 4로 바꾸는 것이다.
이렇게 되면 원활하게 3진법대로 가면서 0이 없는 3진법으로 진행할 수 있게 된다.
정답코드
'''
'25. 12. 27.(토)
1. 자연수만 존재함(0 은 없다는 것)
2. 124만 사용한다.
3. 3진법을 사용하는데 3 -> 4로만 바꾸면 될 듯 싶다.
0 0은 1이 되는 것이고
1 1은 2가 되는 것이고
2 2는 4가 되는 것이다.
3진법을 사용한 뒤에 숫자를 각각 바꿔서 리턴해주면 된다.
0 0
1 1
2 2
3 10
4 11
5 12
6 14
3진법에서 딱 나눠 떨어질 때만 조심하면 될 듯.
6
20
'''
def solution(n):
answer = []
while n:
remain = n % 3
if remain == 0:#0인 수는 없다.
remain = 4
n //= 3
if remain == 4:
n -= 1
answer.append(remain)
return ''.join(map(str, answer[::-1]))
깃허브 : https://buly.kr/FWUFh3k
'코딩테스트 > programmers' 카테고리의 다른 글
| 프로그래머스 / DFS / 무인도 여행 (0) | 2026.01.16 |
|---|---|
| 프로그래머스 / BFS / 리코쳇 로봇 (0) | 2025.12.29 |
| 프로그래머스 / 정수론 / 소수 찾기 (0) | 2025.12.22 |
| 프로그래머스 / 다익스트라 / 배달 (0) | 2025.12.22 |
| 프로그래머스 / 시뮬레이션 / 서버 증설 횟수 (0) | 2025.12.13 |