[프로그래머스][LV.1] 3진법 뒤집기 | python3

2025. 1. 20. 00:35프로그래머스/LV.1

 

문제 링크: 3진법 뒤집기

 

문제 설명

문제 설명

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

제한사항
- n은 1 이상 100,000,000 이하인 자연수입니다.

 


문제 풀이

처음엔 if n<3:을 밑에다가 둔 뒤 풀었는데 테스트1에서 틀렸길래 왜 틀렸을까 생각해보니까 n이 1일때와 2일때가 있으니 if문을 위에 둬야 하는 거였다.

3진법은 정수를 3으로 나눈 몫과 나머지를 이용하여 만들 수 있다. 몫을 3보다 작아질때까지 계속 나누고 나머지를 거꾸로 거슬러 올라간 수가 3진법인데 문제에서는 3진법을 반대로 한 수를 구한다. 그렇기때문에 3으로 나눈 나머지를 차례대로 추가해주면 된다.

 

내코드

def solution(n):
    answer = 0
    str_n=''
    while True:
        if n<3:
            str_n+=str(n)
            break
        str_n+=str(n%3)
        n//=3

    for i in range(len(str_n)):
        answer+=int(str_n[i])*(3**(len(str_n)-1-i))
    return answer

 

 


더보기

다른사람풀이

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

    answer = int(tmp, 3)
    return answer

맞다...int에는 진법을 바꾸어주는 기능이 있었다.

그리고 마지막에는 3보다 작은 몫만 나오기 때문에 즉 이값이 나머지가 되고 n이 0이 될때까지 //로 몫을 구하면 저절로 while문에서 빠져나올 수 있다.