문제

[프로그래머스] 3진법 뒤집기 (LV. 1)

요약

  • 주어진 10진수 n을 3진수로 변환하고, 거꾸로 뒤집어, 10진수로 변환한 뒤 반환한다.

분류

  • 문자열 : 진법 바꾸기

풀이

1. 내 풀이

  • 그냥 스탠다드한 방법이다. 진법 변환에 while 을 사용했다.


def solution(n):
    num_3 = []
    while True:
        if n // 3 == 0:
            num_3.append(n)
            break
        num_3.append(n % 3)
        n //= 3

    num_10 = 0
    for index, val in enumerate(num_3):
        num_10 += val * (3 ** (len(num_3) - index - 1))

    return num_10

2. 최적화 풀이

  • <취업과 이직을 위한 프로그래머스 코딩테스트 문제 풀이 전략> 을 참고한 코드입니다. (링크)
  • divmod() 는 첫 번째 매개변수를 두 번째 매개변수로 나눠, 몫과 나머지를 함께 반환하는 함수이다.
  • int() 함수의 두 번째 인자로, 수 n을 주면 n진수를 십진수로 변환해준다.


def radixChange (num, radix):
    if num == 0: return '0'
    nums = []
    while num:
        num, digit = divmod(num, radix)
        nums.append(str(digit))
    return ''.join(nums)

def solution(n):
    return int(radixChange(n, 3), 3)