[프로그래머스] 3진법 뒤집기 - Python

MinWoo Park·2021년 2월 17일
0

Algorithm

목록 보기
9/42
post-thumbnail

Algorithm Problem with Python — 9day


문제 설명 📖

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • n은 1 이상 100,000,000 이하인 자연수입니다.

입출력 예

입출력 예 설명
입출력 예 #1

  • 답을 도출하는 과정은 다음과 같습니다.
  • 따라서 7을 return 해야 합니다.

입출력 예 #2

  • 답을 도출하는 과정은 다음과 같습니다.
  • 따라서 229를 return 해야 합니다.

문제 이해 🔑

인풋으로 주어진 10진법의 자연수를 3진법으로 바꾼 후 뒤집어진 상태를 다시 10진.법으로 바꾸는 문제입니다.
원하는 진법으로 변경할 수 있는지가 핵심이 되는 문제입니다.


수도 코드 ✍️

  1. 주어진 자연수를 3진법으로 바꿉니다.
  2. 이 때 내장 함수 divmob()를 사용하여 3진법으로 변경합니다.
  3. 2번에서 구한 나머지를 순차적으로 쌓으면 자연스럽게 3진법으로 변경하면서 뒤집는 것을 해결할 수 있습니다.
  4. int()함수를 이용하여 다시 10진법으로 교체합니다.

코드 작성 ⌨️

def solution(n):
    answer = ''

    while n > 0:			
        n, re = divmod(n,3)	# n을 3으로 나눈 몫과 나머지
        answer += str(re)
    return int(answer, 3)

# divmod() : 몫과 나머지를 리턴합니다. 리턴 값이 2개이므로 튜플을 사용합니다.
# int(x, base) : base 진법으로 구성된 str 형식의 수를 10진법으로 변환해 줌


정리 😄

진법을 변경하는 과정에서 a/b, a%b를 통해서도 몫과 나머지를 구할 수 있는 방법이 있고,
divmob()을 통해서도 구할 수 있었습니다.
가독성이나 편리함에서 후자가 좋다고 생각하여 사용했지만 무조건 좋진 않다고 합니다.
작은 숫자를 다룰 때는 전자가 더 빠르고 큰 숫자를 다룰 때는 후자가 더 빠르다고 합니다.
팀 코드 스타일이나 상황에 따라 맞게 사용해야 겠습니다.

profile
물음표를 느낌표로 바꾸는 순간을 사랑하는 개발자입니다.

0개의 댓글