본문 바로가기

알고리즘 삽질장

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

반응형


문제설명

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

 

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

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

programmers.co.kr

사고과정

  • 10진수를 n진수로 만드는 방법은 재귀함수로 활용해서 쉽게 구현했다. 
  • 그런데 n진수로 만든다음 뒤집은 후 다시 이를 10진수로 변환하라고 해서, '뒤집는 것까지' 10진수에서 n진수로 만들 때 적용했다. 그런데 이렇게 하면 10진수로 변환하는 로직을 적용하면, 변환 이전의 10진수값으로 다시 돌아오게 된다. 그래서 10진수 -> n진수로 만들 때 뒤집는 과정까지는 하지 말고 그냥 변환한 후, 이를 10진수로 변환하는 로직을 적용하면 변환하는 과정에서 자동으로 뒤집어져 계산된다. n진수를 10진수로 변환하는 로직을 외워두자.

풀이

result = ''

def solution(n):
    
    def dfs(x):
        global result
        if x == 0:
            return
        else:
            dfs(x // 3)
            result += str(x % 3)
    
    dfs(n)
    
    answer = 0
    for i, val in enumerate(result):
        answer += (3 ** i) * int(val)
    return answer
반응형