자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
n (10진법)
n (3진법)
앞뒤 반전(3진법)
10진법으로 표현
45
1200
0021
7
위 표처럼 정수 45를 입력하면 3진법으로 바꾸고 반전시킨 다음 다시 10진법으로 표기하는 것이다. 정수를 3진법으로 변환하는 방법은 각 자리수를 3으로 계속나누고 나머지를 역순으로 표기하는 것이다. 그러니 정수를 3으로 나눈 나머지를 그대로 10진법으로 표기하면 된다.
def solution(n):
n_lst = []
while n >= 3:
x = n % 3
n_lst.append(x)
n = n // 3
if n < 3:
n_lst.append(n)
m_lst = []
for i in range(1, len(n_lst)+1):
m_lst.append(n_lst[-i] * (3**(i-1)))
return sum(m_lst)
10진법으로 다시 변환하는 과정에서 i를 조작하는데 꽤 많은 시간을 잡아먹었다. 실제 변환하는 것과 달리 역순을 건너뛰어서 반대로 곱해야하 했기 때문이다.
하지만 int를 잘 사용하면 이런 복잡한 생각을 할 필요가 없다.
def solution(n):
tmp = ''
while n:
tmp += str(n % 3)
n = n // 3
answer = int(tmp, 3)
return answer
int로 10진법을 구하는 코드인데 특성을 정말 잘 사용했다.
먼저, while n: 에서 n이 존재하는 한(True) 반복문이 계속 도는데 0이 되면 False를 반환하는 특성을 사용했다.
그리고 int(tmp, 3)을 사용해 간단한게 3진법의 수를 10진법으로 만들었다. 하지만 여기서 유의할 점은 첫번째 인자가 문자열로 들어와야한다. 만약 3진법의 수 1200을 10진법으로 바꾸고싶다면 아래와 같이 작성해야한다.