문제풀이(Problem Solving)

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

게임이 더 좋아 2021. 3. 8. 22:07
반응형
728x170

문제 설명

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


제한사항

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


입출력 예

nresult

45

7

125

229

 

 


 

 

def solution(n):
    answer = 0
    lst = list()
    k = 0;
    #몇자리수인지 찾기
    while(True):
        if(3**k < n < 3**(k+1)):
            break
        k += 1
    
    #3진수로바꾸기
    for i in range(k,-1,-1):
        digit = n//(3**i)
        lst.append(digit)
        n -= (3**i)*digit # 그만큼 빼줘야함
        
    #pop으로 역순으로 곱해주기    
    for _ in range(len(lst)):
        answer += (lst.pop())*(3**k)
        k -= 1
        
    return answer

 

 

물론 빨리 만들었지만.. 시간초과 2개가 나버렸다.. 어느 곳에서 시간이 초과했을까...?

 

while에서 시간초과했다기에 저 수는 3^17 밖에 안되는데..?

 

...아무래도 모르겠어서 다른 분들의 풀이를 참고해봤다.

 

def solution(n):
    answer = 0
    
    conversion = ''
    while True:
        conversion = str(n%3) + conversion 
        n = n//3 
        if n==0: break # 나머지가 0이 되면 반복문 종료
            
    for i in range(len(conversion)):
       answer += int(conversion[i]) * 3**i


    return answer

 

근데 이렇게 하는게 더 효율적일 것 같긴하다.

특히 n진법 구할 때 저렇게 구하는게 가장 좋은 것 같다.

 

 

 

728x90
반응형
그리드형