[5/24] 3진수 구하기

이경준·2021년 5월 24일
0

코테

목록 보기
8/140
post-custom-banner

내 코드

def solution(n):
    exp = 0
    rem = n

    while (rem >= 3):
        rem = rem / 3
        exp += 1

    #몫: quo / 나머지: num
    quo = 0
    answer = []

    for i in range(exp, -1, -1):
        quo = n // (3**i)
        n = n % (3**i)
        answer.append(quo)

    result = 0
    for i in range(exp+1):
        result = result + (3**i) * answer[i]
    return result

풀이

  1. while문 이용해서, 숫자를 3으로 계속 나눠서 최대 지수를 구한다.
  2. 숫자를 3에 최대 지수 승으로 나눠서 3진수를 구하고, 나머지로 계속 나눠준다. 3진수를 배열에 추가한다.
  3. 배열을 순서대로 3의 0승부터 곱한다. (그럼 자동으로 역순으로 계산된다) 계속 더해준다.

효율적인 코드

def solution(n):
    answer = ""

    while (n > 0):
        n, re = divmod(n, 3)
        answer = answer + str(re)
    answer = "".join(map(str, answer))
    result = int(str(answer), 3)

    return result

피드백

  • n진수 구하는 방법 :수를 n으로 계속 나누고, 나머지를 마지막부터 차례로 나열한다.
  • str은 sort 사용 불가 / reversed 사용
  • 문제를 풀때, 해당 로직(소수, 진수 등)을 미리 알고 하면 수월하게 풀 수 있다.

배운 것

  • divmod(n, 진수) : 몫과 나머지를 반환해주는 함수
  • "".join(reversed(문자열)) : 문자열 뒤집기
profile
The Show Must Go On
post-custom-banner

0개의 댓글