Algorithm/Programmers

[Programmers] 월간 코드 챌린지 시즌1 > 3진법 뒤집기

메린지 2022. 5. 12. 13:43

문제 설명

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

제한사항

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

입출력

45 7
125 229

[풀이]

일단 우선 과정이

- n (10진법)                    n (3진법)                                   앞뒤 반전(3진법)                          10진법으로 표현

45 1200 0021 7

이렇게 나와있는데, 차피 나는 3진수를 구하는 과정을 나누기 방식으로 구해서 애초에 뒤집힌 형태로 구하기 쉬웠다!

def solution(n):
    i=1
    sam=[]
    while(1):
        if n<3:
            sam.append(n)
            break
        sam.append(n%3)
        n = n//3
    answer=0
    for i, s in enumerate(sam):
        answer += s*(3**(len(sam)-1-i))
    return answer

그래서 이렇게 구했는데 다른 사람분 답을 보니.. 허거덩

def solution(n):
    tmp = ''
    while n:
        tmp += str(n % 3)
        n = n // 3

    answer = int(tmp, 3)
    return answer

걍 지린다 ㅋㅋ 나처럼 뒤집은 채로 tmp 에 string으로 받고 int() 함수를 이용해서 그 수를 3진수에서 10진수로 빠르게 변환하게 이용했다. 시간복잡도가 어떨진 모르겠지만 하여튼 대단...하다..