Engineering Note

[Programmers] 3진법 뒤집기 본문

Problem Solving/Programmers

[Programmers] 3진법 뒤집기

Software Engineer Kim 2022. 1. 24. 17:12

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/68935

해설

1. 입력값으로 주어진 수를 3진법으로 바꾼다.

2. 1에서 구한 3진법을 표기된 수를 뒤집는다.

3. 2에서 구한 수를 10진법으로 바꾼다.

n진법의 수를 구할때 주어진 수를 n으로 계속 나누면서 나머지를 차례 차례 n의 i승 자리에 적어주면 된다. i는 0부터 시작하여 나눌때마다 1씩 증가한다. 하지만 지금 구해진 각각의 나머지는 한자리 숫자를 의미한다.

뒤집기 위하여 이 수를 리스트에 저장해둘수도 있다. 예를 들면 45를 n진법으로 구하는 과정에서 구해지는 나머지 수는 0,0,2,1 이고 3진법으로 적으면 1200(3)이다. 그렇다면 이 수를 거꾸로 구한 수를 [0,0,2,1]라고 각각 리스트에 적어 둘 수 있다. 하지만 리스트에 저장하지 않고 10진법처럼 적을 수도 있다.나머지를 구할때 0,0,2,1 순으로 수가 구해지는데 이때 첫번째 구한 0은 1을 곱하고

1200이라고 적는 법은 구해진 수를 매번 한단계씩 커진 10의 거듭제곱으로 곱하면 된다.(1,10,100..) 반대로 0021로 적는법은 매번 구해진 수를 1의 자리에 적어주고 이전에 구해진 수에는 10을 곱해서 한자리씩 올려주면 된다.

이렇게 하면 1번과 2번을 한 번에 구할 수 있다.

코드

def solution(n):
    answer = 0
    exponent = 0 
    result = 0
    def reverse_three_digit(x):
        res = 0
        while x:
            x, mod = divmod(x,3)
            res = res*10 + mod
        else:
            return res

    temp = reverse_three_digit(n)
    while temp:
        temp, mod = divmod(temp,10)
        result += (mod*(3**exponent))
        exponent += 1

    return result

'Problem Solving > Programmers' 카테고리의 다른 글

[Programmers] 기능개발  (0) 2022.02.22
[Programmers] 점프와 순간 이동  (0) 2022.02.02
[Programmers] 예상대진표  (0) 2022.01.23
[Programmers] 베스트앨범  (0) 2022.01.18
[Programmers] 전화번호 목록  (0) 2022.01.11
Comments