알고리즘/Programmers

[Programmers] 3진법 뒤집기 (월간 코드 챌린지 시즌1 - Level1, Python3)

 

 

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

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

programmers.co.kr

 

문제 설명

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

 

 

제한 사항

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

 

 

입출력 예

n result
45 7
125 229

 

 

힌트

더보기

진법 변환에 대한 문제이다.

 

혹시나 N진법의 표현법에 대해 잘 모른다면 이것에 대해 먼저 알아볼 필요가 있다.

보편적으로 주어진 숫자 n을 N으로 계속 나누면서 거꾸로 읽어 들이는 방법으로 진법을 변환한다.

이를 다시 10진법으로 변환하는 방법은 int 함수를 사용하면 손쉽게 처리할 수 있다.

 

 

풀이

더보기

문제에서 시키는대로 하면 되지만 진법 변환을 많이 해보지 않았다면 조금 헷갈릴 수도 있다.

먼저 10진법을 3진법으로 바꾸기 위해 주어진 자연수 n을 3으로 계속 나눈 후 나머지를 거꾸로 읽어나가면 된다.

 

def solution(n):
    # 3으로 나눈 나머지를 저장하는 리스트
    save = []
    
    while n:
        # 변환한 3진수를 문자열로 나타낼 것이기 때문에
        # str 형태로 삽입
        save.append(str(n % 3))
        n //= 3
    
    # 거꾸로 읽어들인다
    # -> 이를 다시 앞뒤로 뒤집기 때문에 뒤집을 필요가 없다.
    base_3 = ''.join(save)
    
    # 3진수인 base_3을 10진수로 변환
    answer = int(base_3, 3)
    
    return answer