/////
Search
Duplicate

124 나라의 숫자

태그
기타
비고
체크 필요

문제

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
복사