https://school.programmers.co.kr/learn/courses/30/lessons/12899
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
될 것 같은데, 될 것 같은데 안 되는 이상한 문제입니다.
처음엔 간단히 0,1,2가 1,2,4로 치환된 삼진법 문제라고 생각했습니다.
그런데 생각해 보면 삼진법에서 0,1,2는 따지면 00, 01, 02라고 볼 수 있습니다.
이 문제에선 0,1,2가 직접적으로 대응되지 않을뿐더러 자릿수도 다릅니다.
풀이의 도움을 받아... 예외적으로 동작하는 3의 배수들을 봅시다.
3, 6, 9는 3진법에서 각각 10, 20, 100으로 나타납니다. 즉 3진법 변환에서 나눗셈의 나머지가 본래 순서대로는 [0,1] [0,2] [0,0,1]이라는 얘기인데, 문제의 변환을 보면 [4] [4, 1] [4, 2]로 나타납니다.
나머지가 0인 경우 0이 아니라 4가 들어가고 다음으로 넘겨주는 몫이 1 줄어든다는 사실을 알 수 있습니다.
(역순으로 수가 구해지기 때문에 윗 자릿수를 하나 줄이고 0이 아닌 3을 적는다고 생각하시면 됩니다.)
이 사실을 유념해서 3진법 변환을 진행해주면 됩니다.
124 나라가 아니라 123 나라였으면 좀 더 빨리 이해가 가능했을것 같은데 여러모로 잘 꼰 문제인 것 같습니다.
def solution(n):
answer = []
while n > 0:
if n % 3 == 0:
answer.append(4)
n = (n // 3) - 1
else:
answer.append(n % 3)
n = n // 3
result = ""
for i in range(len(answer)):
addnum = answer[len(answer) - 1 - i]
result += str(addnum)
return result
728x90
'🔍 알고리즘 > 프로그래머스 Python' 카테고리의 다른 글
[Python] 프로그래머스 118666. 성격유형검사하기 (Lv.1) (0) | 2022.08.18 |
---|---|
[Python] 프로그래머스 42586. 기능개발 (Lv.2) (0) | 2022.08.17 |
[Python] 프로그래머스 12906. 같은 숫자는 싫어 (Lv.1) (0) | 2022.08.17 |
[Python] 프로그래머스 86491. 최소직사각형 (Lv.1) (0) | 2022.08.10 |
[Python] 프로그래머스 12901. 2016년 (Lv.1) (0) | 2022.08.10 |