[프로그래머스] 3진법 뒤집기 - 파이썬

문제 설명

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

제한사항

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

입출력 예

n result
45 7
125 229

내 코드

def solution(n):
    answer = 0
    samjin = []

    while (n != 0) :
        samjin.append(n%3)
        n //= 3

    for i, v  in enumerate(reversed(samjin)) :
        answer = answer + (v * 3**i)

    return answer

먼저 10진법을 3진법으로 바꾸기 위해 주어진 수를 3으로 나누어 나머지를 samjin이라는 리스트에 넣고, 또 나눈 몫을 다시 또 3으로 나누어 나머지는 samjin 리스트에 넣는 식으로 n값이 0ㅣ 될 때까지 while문을 통해 반복했다. 그렇게 구해지는 배열을 거꾸로 하면 n을 3진법으로 바꾼 수인데, 문제에서는 3진법을 뒤집은 것을 십진법으로 구하는게 목적이었지만, 3진법을 10진법으로 구할 때 편의를 위해서 다시 reversed() 함수를 통해 samjin을 뒤집어 사용했다. 거기에 인덱스를 활용해서 쓰기 위해 enumerate()함수를 써서 samjin의 첫번째 값이 올때는 3의 i승으로 해서 인덱스에 따라 곱해지게하였다. 처음에는 어렵게 생각했는데, 풀다보니 더 간단하게 풀 수 있었던 것 같다.


다른 사람의 코드

def solution(n):
    answer = 0
    cnt = 1
    a = ''
    while n>0:
        a+=str(n%3)
        n = n//3
    for b in range(len(a),0,-1):
        answer += (int(a[b-1])*cnt)
        cnt *= 3
    return answer

마땅히 눈에 띄는 코드가 없어서 가장 좋아요를 많이 받은 코드를 가져왔다. 나와같이 while 문을 사용하였고, a라는 문자열에 나머지를 구해서 덧붙여주었다. 그리고 a 문자열의 길이 부터 1까지 -1씩 줄어들게 for문을 돌려서 문자열의 맨 마지막 꺼부터 꺼내어 cnt를 활용하여 답을 구하였다. 나는 내가 풀었던 방식이 좀 더 이해하기 쉬운 코드이지 않나 하는 생각이 들었다.


Written by@[Ykss]
고이게 두지 않고 흘려보내는 개발자가 되자.

GitHubInstagramLinkedIn