호기심 많은 분석가

[프로그래머스] 월간 코드 챌린지 시즌1 - 3진법 뒤집기 (Python) 본문

Coding/Coding Test & Algorithm

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

DA Hun 2021. 7. 2. 14:41
 

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

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

programmers.co.kr

내 풀이

def solution(n):
    answer = ""
    k = 0
    while n/3**k >= 1 :
        k += 1
    k -= 1
    while k > -1 :
        quo, n = divmod(n, 3**k)
        answer += str(quo)
        k -= 1
    k = 0
    result = 0
    for i in answer :
        result += int(i)*(3**k)
        k += 1
    return result

 지문에 적혀있는 순서대로 풀었다. 3진법으로 가장 큰 수가 어떤 것인지 구하기 위해 k를 구해주었고, divmod를 통해 몫과 나머지를 구해주며 진법을 완성시켰다. divmod(n, m)을 하면 n을 m으로 나눈 몫과 나머지를 출력해준다. 

 그 후 3진법을 10진법으로 계산해주면서 문제 완료

다른 풀이

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

    answer = int(tmp, 3)
    return answer

 정말 다른 사람의 풀이를 보는 것은 많은 도움이 된다. 어차피 9, 27,... 등은 3으로 나누어 떨어 지기에 3부터 나누어주고 나머지는 3진법의 값으로, 남은 몫들은 다시 3으로 나눠주는 것을 반복하면 10진법의 수를 3진법으로 표현할 수 있고, 여기서 Key-Point, int(n, 3)을 사용해주면 n이라는 숫자가 3진법으로 되어있고 그 수를 10진법으로 다시 변환해준다.

 기억해두면 많은 도움이 될 것이다.