https://school.programmers.co.kr/learn/courses/30/lessons/68935?language=python3
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
n | result |
---|---|
45 | 7 |
125 | 229 |
입출력 예 #1
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
---|---|---|---|
45 | 1200 | 0021 | 7 |
입출력 예 #2
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
---|---|---|---|
125 | 11122 | 22111 | 229 |
<10진수를 n진수로 바꾸는 방법>
바꾸고자 하는 10진수를 몫이 0이 될 때 까지 n으로 나눠주고, 나머지를 아래방향 부터 읽어주면 된다.
def solution(n):
answer = ''
while n > 0:
n, r = divmod(n, 3) # n을 3으로 나눈 몫과 나머지를 튜플 형식으로 반환
answer += str(r) # 숫자를 문자로 변환 후 계속 이어 적기
return int(answer, 3) # 3진수 answer을 10진수로 변환
n > 0 일 때 까지 while 문으로 반복한다.
divmod() 함수로 n을 3으로 나눈 몫과 나머지를 변수 n과 r에 넣어준다.
나머지인 r을 문자 형식으로 바꾼 후 answer에 차례대로 while문을 돌면서 넣어주면 3진법을 앞뒤 반전한 것과 같다. (문자끼리의 덧셈은 이어적기!)
마지막으로 answer을 10진수로 변환 후 값을 반환한다.
:: 매개변수로 두개의 숫자를 입력받아 몫과 나머지를 튜플로 반환
ex) divmod(10, 3)이면 몫 3과, 나머지 1을 튜플 형식인 (3, 1)로 반환
너무 어려워서 다른 분들의 코드를 가져와서 분석만 했다.. divmod(), str(), int() 등 처음 써본 함수가 많아서 코드는 짧지만 많이 어려웠다.