[프로그래머스] 3진법 뒤집기 [월간 코드 챌린지 시즌1] [python] Level1

 

 

문제 설명

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


제한사항

  • n은 1 이상 100,000,000 이하인 자연수입니다.

 

구현 및 설계

 

접근 방식

 

1. 주어진 수를 3진법 변환

2. 앞뒤 반전(역전시키기)

3. 다시 10진법으로 변환

 

문제의 지문대로 구현을 하면 풀 수 있는 문제이다!

 

 

my_solution

# 1
def convert(n):
    T = "012"
    q, r = divmod(n, 3)
    if q == 0:
        return T[r]
    else:
        return convert(q) + T[r]

def solution(n):
    answer = 0
    # ①
    n = list(map(int, convert(n)));
    # ②
    for i in range(len(n)):
            answer += n[i] * (3 ** i)
    return answer

1. convert는 10진수를 3진법으로 변환해주는 함수이다.

 

  ①. n을 3진법으로 변환시킨다.(int형 리스트로 만든다)

  ②. n을 앞의 인덱스값 부터 n[i] * (3 ** i)   n[i]에 3의 제곱값을 곱해 answer에 쌓아준다.

그러면 answer에  1. 주어진 수를 3진법 변환

                       2. 앞뒤 반전(역전시키기)

                       3. 다시 10진법으로 변환

                        한 수가 저장되며 answer을 반환하여 문제를 해결할 수 있다!

반응형

+ Recent posts