124 나라의 숫자

zzwwoonn·2022년 6월 14일
0

Algorithm

목록 보기
53/71

다시 봐도 너무 어렵더라

def solution(n):
    answer = ''
    
    while n:
        # input()
        # answer += str(dic[n % 3])
        # 나누어 떨어지면? => 4 추가
        # 2 남으면 => 2 추가
        # 1 남으면 => 1 추가
        # print("result = ", answer)

        if n % 3:
            # 3으로 나누어 떨이지지 않을 때
            answer += str(n % 3)
            n = n//3

        else:
            # 3으로 나누어 떨어질 때
            answer += "4"
            n = n//3 - 1
    
    return answer[::-1]

4에서 12까지를 예로 들어보면 4,5,7,8,10,11 은 생각했던 그대로가 맞다.
3으로 나눠줬을 때 몫을 다음 루프로 넘기고 나머지를 문자열로 추가해주면 된다.

이진법을 구할 때와 똑같은 로직인데 3으로 나누어 떨어질 때(나머지가 0일 때)는 4를 추가해준다.

살짝 어려웠던 부분은 바로 3으로 나누어 떨어질 때 이다. 예를 들어 9가 주어졌을 때 제일 처음 3으로 나누면 몫이 3이고 나머지가 0이다.

나머지가 0이므로 4를 추가한다. 몫인 3에 대해 다시 3을 나눠주면? 안된다.

3으로 나누어 떨어졌을 때는 몫에 1을 마이너스 해줘야 한다. 9는 3으로 나누어 떨어져서 몫이 3이므로, -1 해주고, 2가 된다. 2를 문자열에 추가해주면 정답인 24가 된다.
(마지막에 문자열 뒤집기 해줘야 한다 => answer[::-1] 또는 reverse())

0개의 댓글