https://school.programmers.co.kr/learn/courses/30/lessons/68935
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
def solution(n):
n3 = ""
while n // 3 != 0:
n3 += str(n % 3)
n //= 3
n3 += str(n)
answer = 0
for i in range(len(n3)):
answer += int(n3[i]) * (3**(len(n3)-1-i))
return answer
종종 쓰이는 8진법이나 16진법이 아닌 3진법의 변환은 익숙하지 않아 10진법을 2진법으로 만드는 식으로 바꿨다. while문과 for문을 모두 사용해 그닥 깔끔하지는 않은 코드 같다.
while문을 사용한 결과는 문자열에 담기는데 순서가 이미 뒤집어진 3진법으로 나온다. 그리고 for문을 통해 3진법으로 만든 문자열을 10진법 숫자로 변환했다.
def solution(n):
tmp = ''
while n:
tmp += str(n % 3)
n = n // 3
answer = int(tmp, 3)
return answer
->
while문을 사용해 빈 문자열에 값을 추가하는 부분은 비슷했고, (차이가 있다면 위의 풀이는 while문의 조건을 n으로 해서 n의 값이 0이되면 False가 되도록했다.)
int(n, 3)을 사용하면 간단하게 3진법의 수를 10진법으로 변환할 수 있었다😂
[ n진수 -> 10진수 변환 ] : int(string, base)
그 외의 다른 풀이도 찾아보았는데 while문과 for문을 둘 다 쓰는 사람이 많았다.