https://programmers.co.kr/learn/courses/30/lessons/72410
다음 문제는, 입력된 정수를 3진법으로 변환한 후 앞뒤 반전을 한뒤 10진법으로 재차 변환하는 문제입니다.
- 입력된 정수 n이 3 미만일때는 나머지를 리스트에 추가
- 입력된 정수 n이 3 이상일 때 까지 계속 나누면서 나머지를 리스트에 추가
(reverse 효과 발생)- n이 3이하일 때는 몫을 리스트에 추가
- pow와 슬라이싱을 가지고 10진법으로 변환
def solution(n):
answer = 0
list1 = []
if n < 3:
list1.append(n)
else:
while (n >= 3):
list1.append(int(n % 3))
if (n//3 < 3):
list1.append(int(n // 3))
n /= 3
for i in range(len(list1)):
answer += (pow(3, i) * list1[::-1][i])
return answer
def solution(n):
tmp = ''
while n:
tmp += str(n % 3)
n = n // 3
print(tmp)
answer = int(tmp, 3)
print(answer)
return answer
일단 n이 3이상일 때 까지 나눠 나머지를 대입하는 알고리즘을 구상해, 만약 n이 3이하라면 또 처리해줘야 하는 번거로움이 있었다. 이 방법 말고 0이상일 때 까지 나눠 나머지를 대입하는 알고리즘으로 구상해 표현하면 그 방법이 더 효율적일 것 같다.
def solution(n):
answer = 0
list1 = []
while (n > 0):
list1.append(int(n % 3))
n = int(n // 3)
for i in range(len(list1)):
answer += (pow(3, i) * list1[::-1][i])
return answer
>>> int('a',base=16)
10
>>> int('z',base=36)
35
>>> int('42', 10)
42
>>> int('42')
42