문제
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
1.
124 나라에는 자연수만 존재합니다.
2.
124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.
제한사항
• n은 500,000,000이하의 자연수 입니다.
예시
정답
def solution(n):
q = n
answer = ''
while q > 0:
temp_q, r = divmod(q, 3) # 3으로 나눈 몫과 나머지
if r == 0: # 나머지가 0인 경우
q = temp_q - 1 # 몫은 하나 낮춤
answer += '4' # 4가 붙는다.
elif r == 1:
q = temp_q
answer += '1'
elif r == 2:
q = temp_q
answer += '2'
answer = answer[::-1] # 거꾸로 출력
return answer
Python
복사
풀이
•
10진법을 3진법으로 변환하는 방법을 차용하되 살짝 다른 방법을 사용해야 한다.
•
10진법을 3진법으로 변환하려면 변환할 숫자를 몫이 0이 될 때까지 3으로 나누고 나머지를 거꾸로 출력하면 된다.
•
그런데 이 문제에서는 4가 10의 역할을 대신하기 때문에 같은 방식으로 해서는 안 된다.
•
4는 10의 역할이기 때문에 4로 표기하는 대신에 위의 값을 하나 빼게 만든다. 예를 들어서 3을 3으로 나누면 나머지는 0이다. 나머지가 0일 때 우리는 4로 표기해야 한다. 그런데 원래 3을 3으로 나눴을 때 몫은 1인데 4는 위의 값을 하나 빼오기 때문에 몫이 하나 줄어들게 된다. 따라서 몫은 0이 되고 몫이 0이 되었기 때문에 나누는 것을 멈춘다. 그러므로 3은 4로 표기된다.
•
따라서 정리하면 나머지가 1과 2일 때는 그냥 그대로 진행한다.
•
나머지가 0일 때는 4로 표기하고 대신에 몫을 하나 뺀다.
while q > 0:
temp_q, r = divmod(q, 3) # 3으로 나눈 몫과 나머지
if r == 0: # 나머지가 0인 경우
q = temp_q - 1 # 몫은 하나 낮춤
answer += '4' # 4가 붙는다.
elif r == 1:
q = temp_q
answer += '1'
elif r == 2:
q = temp_q
answer += '2'
Python
복사