반응형
728x170
문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
-
n은 1 이상 100,000,000 이하인 자연수입니다.
입출력 예
nresult
45 |
7 |
125 |
229 |
def solution(n):
answer = 0
lst = list()
k = 0;
#몇자리수인지 찾기
while(True):
if(3**k < n < 3**(k+1)):
break
k += 1
#3진수로바꾸기
for i in range(k,-1,-1):
digit = n//(3**i)
lst.append(digit)
n -= (3**i)*digit # 그만큼 빼줘야함
#pop으로 역순으로 곱해주기
for _ in range(len(lst)):
answer += (lst.pop())*(3**k)
k -= 1
return answer
물론 빨리 만들었지만.. 시간초과 2개가 나버렸다.. 어느 곳에서 시간이 초과했을까...?
while에서 시간초과했다기에 저 수는 3^17 밖에 안되는데..?
...아무래도 모르겠어서 다른 분들의 풀이를 참고해봤다.
def solution(n):
answer = 0
conversion = ''
while True:
conversion = str(n%3) + conversion
n = n//3
if n==0: break # 나머지가 0이 되면 반복문 종료
for i in range(len(conversion)):
answer += int(conversion[i]) * 3**i
return answer
근데 이렇게 하는게 더 효율적일 것 같긴하다.
특히 n진법 구할 때 저렇게 구하는게 가장 좋은 것 같다.
728x90
반응형
그리드형
'문제풀이(Problem Solving)' 카테고리의 다른 글
소수 찾기 1단계, Python3 [프로그래머스] (0) | 2021.03.12 |
---|---|
같은 숫자는 싫어, Python3 [프로그래머스] (0) | 2021.03.09 |
2016년, Python3 [프로그래머스] (0) | 2021.03.08 |
K번째 수, Python3 [프로그래머스] (0) | 2021.03.08 |
체육복, Python3 [프로그래머스] (0) | 2021.03.07 |