PROGRAMMERS Python Lv1. 3진법 뒤집기
이번 문제는 3진법 뒤집기이다.
이 문제는 n을 3으로 나눈 나머지를 이용하는 문제이다.
다음의 코드를 통해 문제를 풀이해보겠다.
def solution(n):
answer = ''
while n >= 1:
n, rest = divmod(n, 3)
answer += str(rest)
answer = int(answer, 3)
return answer
이 코드는 내가 접근한 방식이 아니였다.
- n을 계속 나눠야 하기 때문에 for 문 대신 while 문을 사용한다.
divmod 함수는 몫과 나머지를 동시에 반환해주는 함수이다. 따라서
n에는 몫을, rest에는 나머지를 반환해준다.
-
반환된 rest를 문자열로 잇는다.
-
int(answer, 3)은
int(x, base)이다. 주어진 str형식의 x를 base진법으로 변환시켜주는 함수이다.
따라서 answer를 3진법으로 변환시키고 그것을 int형식으로 바꿔준다.
위의 풀이는 divmod와 int함수를 활용한 매우 좋은 코드인 것 같다.
나는 아래의 코드와 유사하게 접근했다.
def solution(n):
answer = ''
result = 0
while n >= 1:
rest = n % 3
n = n//3
answer += str(rest)
i = 0
for idx in range(len(answer)-1, -1, -1):
result += int(answer[idx]) * (3 ** i)
i += 1
return result
첫 번째 코드와 다른 점은 답을 구하는 과정에서
for문을 사용한 점이다.
i = 0
for idx in range(len(answer)-1, -1, -1):
result += int(answer[idx]) * (3 ** i)
i += 1
return result
answer의 index를 접근하는데 있어서 range(,,-1)을 이용해서 거꾸로 읽어줬다.
결과는 3의 i 승을 해주고 i는 1씩 증가시켜주면 된다.
정리하자면, n진법 문제는 divmod 와 int(x, base)를
활용해주면 매우 간편하다
혹시 제 풀이에 오류가 있거나
더 좋은 방법이 있다면 댓글 남겨주시면 감사드립니다.
댓글남기기