[문제 설명]
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
[제한사항]
[입출력 예]
[입출력 예 설명]
입출력 예 #1
입출력 예 #2
나의 풀이
num = 0
n3 = [] # 3진법 리스트
# 1
for i in range(1,18):
if n >= 3**i:
num += 1
else:
break
# 2
for i in range(num,-1,-1):
if n >= 2*(3**(i)):
n3.append(2)
n -= 2*(3**(i))
elif n >= 3**(i):
n3.append(1)
n -= 3**(i)
else:
n3.append(0)
# 3
answer = 0 # 앞뒤 반전한 후 3진법>10진법으로 표현한 수
for i in range(len(n3)):
answer += (n3[i])*(3**(i))
전체 코드는 다음과 같다.
def solution(n):
num = 0
n3 = []
# 1
for i in range(1,18):
if n >= 3**i:
num += 1
else:
break
# 2
for i in range(num,-1,-1):
if n >= 2*(3**(i)):
n3.append(2)
n -= 2*(3**(i))
elif n >= 3**(i):
n3.append(1)
n -= 3**(i)
else:
n3.append(0)
answer = 0
# 3
for i in range(len(n3)):
answer += (n3[i])*(3**(i))
return answer
푸는 데에 시간이 오래 걸렸다. 지쳐서 풀이를 포스팅하지 못한 걸 폴더를 정리하면서 알았다😅
순위도 캡처 못했다.. 힘들어도 당일 포스팅 잊지말기❗
다른 사람의 풀이 #1
def solution(n):
tmp = ''
while n:
tmp += str(n % 3) # 나머지
n = n // 3 # 몫
answer = int(tmp, 3)
return answer
다른 사람의 풀이 #2
def solution(n):
answer = 0
cnt = 1
a = ''
while n>0:
a+=str(n%3)
n = n//3
for b in range(len(a),0,-1):
answer += (int(a[b-1])*cnt)
cnt *= 3
return answer