[프로그래머스] 3진법 뒤집기

isTuna·2020년 11월 23일
0

[프로그래머스]

목록 보기
8/9
post-thumbnail

3진법 뒤집기

문제 설명

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

nresult
457
125229

입출력 예 설명

답을 도출하는 과정은 다음과 같습니다.

n (10진법)n (3진법)앞뒤 반전(3진법)10진법으로 표현
45120000217

따라서 7을 return 해야 합니다.


나의 풀이

from math import pow

def solution(n):
    answer = 0
    temp = []
    while n!=0:
        if n < 3 : 
            temp.append(n)
            n = 0
        elif n % 3 == 0 :
            temp.append(0)
            n = n/3
        else:
            temp.append(n%3)
            n = int(n/3)
            
    for i in range(len(temp)):
        answer += pow(3,len(temp)-i-1) * temp[i]
        
    return answer

저는 Python으로 이 문제를 풀어보았습니다. 문제를 보고 먼저 든 생각이 매개변수 n을 3진법으로 변환하는 반복문을 만들고 그것을 담을 list temp를 만드는 것이였습니다. while문을 사용하여 매개변수 n0이 될때 까지 나누면서 나머지값을 tempappend()를 사용하여 하나씩 추가하였습니다.

리스트에 append() 함수를 사용하면 리스트 맨뒤에 추가하게 되므로 앞뒤가 반전된 순서로 추가됩니다. 이렇게 되면 3진법을 반전시키는 과정을 생략할수 있습니다.

temp가 완성되면 이제는 answer을 계산해줘야합니다. 저는 math 모듈에서 pow 함수를 가져와서 제곱을 계산했습니다. pow(3,len(temp)-i-1)은 3진법을 10진법으로 변환하기 위한 식으로 list의 첫번째 수는 3의 len(temp)-0-1이 되므로 [0,0,2,1]을 예로 들면 4-0-1이 됩니다. 즉, 3의 3승을 0과 곱한 값을 answer와 더합니다.


후기

이렇게 풀어 테스트는 모두 통과했지만 사실 그렇게 효율적이진 않은 것 같다. 반복문이 2개가 사용되었는데 1개로 바꾸는 방법도 존재할 것 같다.

profile
청소연구소 개발자 (2021. 05~ )

0개의 댓글