프로그래머스/Level 1

3진법 뒤집기

유니디니 2020. 11. 21. 23:59
728x90
반응형

3진법 뒤집기(월간 코드 챌린지 시즌1)

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


제한사항

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

입출력 예

n result
45 7
125 229

입출력 예 설명

 

입출력 예 #1

  • 답을 도출하는 과정은 다음과 같습니다.
n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
45 1200 0021 7
  • 따라서 7을 return 해야 합니다.

입출력 예 #2

  • 답을 도출하는 과정은 다음과 같습니다.
n (10진법)
n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
125 11122 22111 229
  • 따라서 229를 return 해야 합니다.

나의 풀이

def solution(n):
    answer = 0
    tmp = []
    while(n !=0):
        a, b  = divmod(n,3)
        tmp.append(b)
        n=n//3

    for i in range(len(tmp)):
        answer+=(tmp.pop()*(3**i))
    return answer

divmod함수는 몫과 나머지를 반환하는 함수로 a,b를 반환한다. 반환된 값은 나머지 값만 tmp(list)에 저장하게 되고, 결과를 출력해보면 자연스럽게 앞뒤가 뒤집어져 있는 3진법결과를 얻을 수 있다. 그 후, 10진법으로 다시 표현하면 다음과 같다. 

 

다른 사람의 풀이

def n_ary(n, base):
   result = []
   while n>0:
       n, r = divmod(n, base)
       result.append(r)
   return ''.join(map(str, reversed(result)))

def solution(n):
    b3 = n_ary(n,3)
    b3 = b3[::-1]
    return int(b3,3)

n_ary 함수에서 몫과 나머지를 구했으며 나와 비슷한 방법으로 나머지 값을 list에 넣었다. b3[::-1]은 뒤에서 부터 순서대로 1씩 꺼내는 방법이며 int(a,b)는 다른 진수의 문자열을 숫자형으로 변환하는 함수라고 한다.

 

예를 들어, int('0b101010', 2)는 2진수를 10진수로 바꾸는 방법으로 2+8+32=42의 값을 나타낸다. 기본적으로 두번째 인자의 디폴트 값은 10이기때문에 int('42') = 42의 값이 나온다.

 

이외에도, bin(), oct(), hex()등이 있다.

 

참고 자료: docs.python.org/3/library/functions.html#int

 

Built-in Functions — Python 3.9.0 documentation

Built-in Functions The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order. abs(x) Return the absolute value of a number. The argument may be an integer, a floating poin

docs.python.org

www.daleseo.com/python-int-bases/

 

[파이썬] 2진수, 8진수, 16진수 다루기

Engineering Blog by Dale Seo

www.daleseo.com

반응형

'프로그래머스 > Level 1' 카테고리의 다른 글

소수 찾기  (0) 2020.11.23
체육복  (0) 2020.11.22
1차 비밀지도  (0) 2020.11.21
행렬의 덧셈  (0) 2020.11.20
최대공배수와 최대공약수  (0) 2020.11.20