본문 바로가기

코딩테스트/Programmers

[Programmers/프로그래머스]3진법 뒤집기

728x90
반응형

문제 설명

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

제한사항
  • n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예
n result
45 7
125 229
입출력 예 설명

입출력 예 #1

  • 답을 도출하는 과정은 다음과 같습니다.
n(10진법) n(3진법) 앞뒤반전(3진법) 10진법으로 표현
45 1200 0021 7
  • 따라서 7을 return 해야 합니다.

입출력 예 #2

  • 답을 도출하는 과정은 다음과 같습니다.
n(10진법) n(3진법) 앞뒤반전(3진법) 10진법으로 표현
125 11122 22111 229
  • 따라서 229를 return 해야 합니다.

풀이

이 문제는 먼저 n을 3진수로 바꾸는 것부터 시작한다.

  • 10진수 n을 3진수로 바꾸는 공식은 n을 3으로 나눈 나머지를 나머지가 0이될 때까지 반복하면서 순서대로 붙여서 나열하는 방법이 있다.
  • 코드로 나타내면 다음과 같다.
tmp = ''
while n:
    tmp += str(n%3)
    n//=3

위의 코드를 통해 3진수로 변환된 문자열 타입의 n이 나온다.

이 숫자를 앞뒤 반전 후 10진수으로 바꾸어 반환하면 된다.

  • 3진수를 10진수로 바꾸는 방법은 3진수의 오른쪽 자리수 부터 3의 0~n 제곱을 하여 모두 더하면된다.
// 3진수 int_3
[3**idx*int(n) for idx,n in enumerate(int_3[-1::-1])]

모두 합치면 다음과 같다.

def solution(n):
    int_3 = ''
    while n:
        int_3+= str(n%3)
        n //= 3
    return sum([3**idx*int(n) for idx,n in enumerate(int_3[-1::-1])])
728x90
반응형