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
반응형
'코딩테스트 > Programmers' 카테고리의 다른 글
[Programmers/프로그래머스]예산 (2) | 2022.09.30 |
---|---|
[Programmers/프로그래머스]이상한 문자 만들기 (2) | 2022.09.30 |
[Programmers/프로그래머스]같은 숫자는 싫어 (0) | 2022.09.29 |
[Programmers/프로그래머스]최대공약수와 최소공배수 (0) | 2022.09.29 |
[Programmers/프로그래머스]직사각형 별 찍기 (0) | 2022.09.29 |