Algorithm/Programmers
[Programmers] 월간 코드 챌린지 시즌1 > 3진법 뒤집기
메린지
2022. 5. 12. 13:43
문제 설명
- 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- n은 1 이상 100,000,000 이하인 자연수입니다.
입출력
45 | 7 |
125 | 229 |
[풀이]
일단 우선 과정이
- n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
45 | 1200 | 0021 | 7 |
이렇게 나와있는데, 차피 나는 3진수를 구하는 과정을 나누기 방식으로 구해서 애초에 뒤집힌 형태로 구하기 쉬웠다!
def solution(n):
i=1
sam=[]
while(1):
if n<3:
sam.append(n)
break
sam.append(n%3)
n = n//3
answer=0
for i, s in enumerate(sam):
answer += s*(3**(len(sam)-1-i))
return answer
그래서 이렇게 구했는데 다른 사람분 답을 보니.. 허거덩
def solution(n):
tmp = ''
while n:
tmp += str(n % 3)
n = n // 3
answer = int(tmp, 3)
return answer
걍 지린다 ㅋㅋ 나처럼 뒤집은 채로 tmp 에 string으로 받고 int() 함수를 이용해서 그 수를 3진수에서 10진수로 빠르게 변환하게 이용했다. 시간복잡도가 어떨진 모르겠지만 하여튼 대단...하다..