반응형

문제풀이

1. n을 3진수로 변환한다.

2. 1의 결과를 뒤집는다.

3. 2의 결과를 다시 10진수로 변환한다.

 

n=10을 예로 들면, 10을 3진수로 변환한 1의 결과는 101이다. 이를 뒤집은 2의 결과는 101이다. 이를 다시 10진수로 변환한 3의 결과는 1*3^2 + 0*3^1 + 1* 3^0 = 10 이다. (예시의 n과 최종 답이 같은 것은 우연이다.)

 

Python Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def solution(n):
    return r_convert(convert(n,3)[::-1],3)
 
# 10진수인 n을 base진수로 변환
def convert(n, base):
    T = "0123456789ABCDEF"
    q, r = divmod(n, base) # n을 base로 나눈 몫과 나머지를 튜플형태로 반환
    if q == 0:
        return T[r]
    else:
        return convert(q, base) + T[r]
 
# base진수인 n을 10진수로 변환
def r_convert(n, base):
    l = len(n)
    ans = 0
    for i, v in enumerate(n):
        ans += int(n[i])*pow(base,l-i-1)
        print(ans)
    return ans
cs

Line 2 : str[::-1]을 통해 convert(v,3)의 결과를 뒤집어 준다.

 

문제 링크

 

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

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

programmers.co.kr

 

반응형

+ Recent posts