[알고리즘] 124 나라의 숫자

권윤경·2021년 11월 19일
0

알고리즘

목록 보기
10/13
post-thumbnail

프로그래머스_123나라의 숫자

3진법을 활용한 문제라는 것을 빠르게 캐치한다면 문제 없이 바르게 풀 수 있는 문제다.

평소 2진법 8진법 10진법 16진법만 알고 들었던 터라 규칙을 찾기에 조금 어려웠던거 같다.

일반 3진법과 124나라의 3진법을 비교해보면 아래와 같다.

1.반복의 차이점
일반 3진법 : 0, 1, 2, 10, 11, 12, 20, 21, 22, 30, 31, 32 ...
124나라의 3진법 : 1, 2, 4, 11, 12, 14, 21, 22, 24, 31, 32, 34 ...

나열하고 보면 일반 3진법은 일의 자리가 0, 1, 2 로 반복되며, 124나라의 3진법은 일의 자리가 1, 2, 4 로 반복되고 있음을 알 수 있다.

2.0대신 4를 사용
위의 반복의 차이점을 살펴보면,
3진법은 0,1,2
124 나라의 3진법은 1,2,4
124 나라의 3진법은 0을 사용하지 않음을 알 수 있다. 즉, 0대신 4를 사용함을 알 수 있다.

그럼 이를 어떻게 맞춰줄 수 있을까 ??

주어진 10진수를 124나라의 진수법으로 변환을 할 때, 3으로 나누어 떨어진다면 그 몫을 하나 낮추어서 나머지가 3이 되도록 만들어주는 것이다.

숫자 5
5를 3으로 나누게 되면 몫이 1이되고 나머지가 2가 된다.(나머지가 "2")
여기서 나누어 떨어지지 않았으므로 몫을 가지고 그대로 계산을 한다.
몫인 1을 3으로 나누게 되면 몫이 0이되고 나머지가 1이 된다.(나머지가 "1")
따라서 나머지를 추가해주면 "12"로 숫자"5"는 124나라의 3진법 계산으로 "12"가 된다.

숫자 9
9를 3으로 나누게 되면 몫이 3이 되고 나머지가 0이 된다.
여기서 나누어 떨어졌으므로 나머지는 "0"대신 "4"를 사용한다.(나머지가 "4")
그리고 몫을 하나 감소시켜준다.
몫인 2를 3으로 나누게 되면 몫이 0이되고 나머지가 "2"가 된다.(나머지가 "2")
따라서 나머지를 추가해주면 "24"로 숫자"9"는 124나라의 3진법 계산으로 "24"가 된다.

def solution(n):
    answer = ''
    nArray = ['1', '2', '4']
    
    while (n > 0):
        n -= 1
        answer = str(nArray[n % 3]) + answer
        n = n // 3
        
    return answer

0개의 댓글