PROGRAMMERS Python Lv1. 3진법 뒤집기

1 분 소요

이번 문제는 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)를

활용해주면 매우 간편하다

혹시 제 풀이에 오류가 있거나

더 좋은 방법이 있다면 댓글 남겨주시면 감사드립니다.

댓글남기기