https://programmers.co.kr/learn/courses/30/lessons/68935
문제설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예 설명
n (10진법) | n (3진법) | 앞뒤 반전 (3진법) | 10진법으로 표현 |
---|
45 | 1200 | 0021 | 7 |
n (10진법) | n (3진법) | 앞뒤 반전 (3진법) | 10진법으로 표현 |
---|
125 | 11122 | 22111 | 229 |
문제풀이
def solution(n):
answer = ''
while(n >= 1):
rest = n % 3
n = n // 3
answer += str(rest)
return int(answer, 3)
print(solution(45))
- n // 3 -> n을 3으로 나눈 몫
- n % 3 -> n을 3으로 나눈 나머지
- n 을 나누고 나머지를 answer에 순서대로 넣음
- 순서대로 넣으면 앞뒤 반전 한 것과 같음
- n이 1이 될때까지 계속 나눔
- int(n, base)를 통해 base진법을 10진법으로 변환
다른 풀이
def solution(n):
answer = ''
while n >= 0:
n, re = divmod(n,3)
answer += str(re)
return int(answer, 3)
- divmod()함수를 통해 몫과 나머지를 구할 수 있음 (2개의 값 리턴)