본문 바로가기

두두의 알고리즘/문제

[진법 변환] 프로그래머스 L1 '3진법 뒤집기' (Python)

728x90

<문제 링크>

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

 

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

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

programmers.co.kr


<문제 풀이>

1. 정수를 3진법으로 구하고 그 값의 앞뒤를 반전시키고 [::-1] 다시 10진법으로 표현한다.

 

<코드>

def solution(n):
    answer = ''
    i=1
    three = [1]
    answer2 = 0
    
    while 3**i<=n:
        three.append(3**i)
        i += 1
    
    for i in three[::-1]:
        tmp = 0
        while i<=n:
            n -= i
            tmp += 1
        answer += str(tmp)
        
    for idx, i in enumerate(answer):
        answer2 += int(i) * (3**idx)    

    return answer2

 

<고쳐야 할 점>

  • n==3일 때 주의.. 3진법으로 10이므로, 앞뒤 반전하면 01이므로 답은 1이다.
  • 복습 알고리즘