124 나라의 숫자
문제 설명
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
- 124 나라에는 자연수만 존재합니다.
- 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
10진법 | 124 나라 | 10진법 | 124 나라 |
---|---|---|---|
1 | 1 | 6 | 14 |
2 | 2 | 7 | 21 |
3 | 4 | 8 | 22 |
4 | 11 | 9 | 24 |
5 | 12 | 10 | 41 |
자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.
제한사항
- n은 500,000,000이하의 자연수 입니다.
입출력 예
n | result |
---|---|
1 | 1 |
2 | 2 |
3 | 4 |
4 | 11 |
문제풀이 IDEA
1,2,4 라는 숫자로 표현하는것 외에는 3진수와 표현이 같은 방식이다
하지만 이를 시각적으로 확인을 해보면
1 - 1 2 - 2 3 - 4
4 - 11 5 - 12 6 - 14
7 - 21 8 - 22 9 - 24
3으로 나눈 나머지에 따라 마지막 자리수가 결정되는 것을 알수 있다.
그리고 7의 경우 7 = 3*2 + 1 이라서 마지막자리에 1이 붙고 몫인 2에 대해서는 2가 붙는다.
예외적으로 3의 배수인 경우 3으로 나눈 몫-1 에 대응되는 수를 가져온다
나의 코드
def solution(n):
answer = '' #124로 구성된 수를 더하기 위해 문자열을 준비한다
ans_dict = {0: 4, 1: 1, 2: 2} #나머지에 대응되는 수를 뽑아오기 위해 dict을 사용했는데 list로 해도 무방할것 같다
while True: #beak조건을 만족하기 전에는 지속적으로 n을 연산하여 update해줍니다
answer = str(ans_dict[n % 3]) + answer #answer += str()을 안해준 이유는 update되는 n%3에 대해 추가되는 수는 앞쪽에 더해져야하므로
if n % 3 == 0: #만약 n이 3의 배수이면 n//3이 아니라 n//3-1을 저장해줘 1,2,4 숫자와 제대로 대응시켜준다
n = n//3 - 1
else: #그게 아니라면 n을 n//3으로 update해준다.
n = n//3
if n == 0: #그리고 반복문에서 n이 0이면 더 이상 연산을 진행하지 않아도 되므로
break #break해준다
return answer
다른 코드
def change124(n):
num = ['1', '2', '4'] #대응되는 수를 list의 index로 가져올 수 있게 한다.
answer = ""
while n > 0: #n이 0이면 while문이 끝나게 한다
n -= 1 #나머지에 대응해보면 0 : 4 , 1: 1 , 2 : 2 인데
#n -1 을 해주고 list의 원소순서를 고쳐 코드를 if문으로 상황에 따라 나누지 않아도 되도록 했다
answer = num[n % 3] + answer
n //= 3
return answer
출처 : 프로그래머스