https://programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수

programmers.co.kr

 


풀이 과정

45(10) = 1200(3)

 

10진수 자연수를 입력받고 뒤집은 3진수로 변환하려면 3보다 작아질때 까지 나눠가면서 나머지를 문자열에 붙이고, 3보다 작아진 몫을 문자열에 또 붙여주면 된다.

 

이제 그 문자열을 다시 3진법의 자릿수를 고려하면서 10진수로 바꾼 후 출력해주면 된다.

 

나는 자릿수를 계산하면서 '0021' = 2*(3^1) + 1*(3^0) 이런식으로 해결하였으나 파이썬에서는

 

int('n진수 문자열', n)으로 n진수 문자열을 10진수 정수로 바꿀수 있다.

ex) int('ABCD', 16) = 43981

      int('101010111101', 2) = 2749

 


소스 코드

def solution(n):
    answer = 0
    temp_string = ''
    while n >= 3:
        temp_string += str(n % 3)
        n //= 3
    temp_string += str(n)
    
    for digit in range(len(temp_string)):
        answer += int(temp_string[digit]) * (3 ** (len(temp_string) - (digit + 1)))
    
    return answer​

+ Recent posts