기록하는삶
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 3진법 뒤집기 본문
728x90
반응형
[문제 설명]
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
[제한 조건]
- n은 1 이상 100,000,000 이하인 자연수입니다.
수학을 공부한게 부끄러운 코드였다,,
def solution(n):
lst = []
i = -1
while 3**(i+1) <= n :
i += 1
while i >= 0 :
if n - (3**i)*2 >= 0:
n -= (3**i)*2
lst.append(2)
elif n - (3**i)>= 0:
n -= (3**i)
lst.append(1)
else:
lst.append(0)
i -= 1
cnt = len(lst)
answer = 0
while cnt >= 0 :
cnt -= 1
answer += (3**cnt) * lst[cnt]
return int(answer)
아래는 제일 깔끔한 코드.
def solution(n):
tmp = ''
while n:
tmp += str(n % 3)
n = n // 3
answer = int(tmp, 3)
return answer
3진법을 '뒤집는' 것이 문제의 목표이다. 그리고 진법의 기본은 나누기.
1) n을 3으로 나눈 나머지가 n을 3진수로 표현한 수의 맨 끝자리 -> tmp의 맨 앞으로
2) 다시 그 몫을 3으로 나눈 나머지가 n을 3진수로 표현한 수의 끝에서 두 번째 자리 -> tmp의 두 번째 자리로
3) 다시 그 몫을 3으로 나눈 나머지가 n을 3진수로 표현한 수의 끝에서 세 번째 자리 -> tmp의 세 번째 자리로
.....
while n에서 n==0이 되면 False로 해석되어 반복문이 종료되는 것까지,,
그리고 int의 새로운 기능을 알게 되었다.
이처럼 int(x,y) string으로 주어진 x가 y진법으로 표현된 것이라 할 때, 그 수를 10진법으로 변환한 숫자를 반환한다.
즉 위의 코드에서는 tmp에 3진법 표현을 뒤집어 string으로 모은 뒤, int를 이용해 변환하였다.
728x90
반응형
'프로그래머스 > 프로그래머스_lv1(Python)' 카테고리의 다른 글
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 두 개 뽑아서 더하기 (0) | 2021.09.08 |
---|---|
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 음양더하기 (0) | 2021.09.08 |
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 예산 (0) | 2021.09.07 |
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ 소수 찾기 (0) | 2021.09.07 |
[코딩 문제 풀이(파이썬/Python)] 프로그래머스 _ K번째 수 (0) | 2021.09.07 |