기록

[Python] 3진법 뒤집기 본문

[Study]/코딩테스트 연습

[Python] 3진법 뒤집기

Dannnnnn 2020. 11. 7. 17:32
반응형

programmers.co.kr/learn/courses/30/lessons/68935

 

코딩테스트 연습 - 3진법 뒤집기

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

programmers.co.kr

문제의 요구사항은 매개변수로 받아온 10진수를 3진법으로 변환 후, 그 3진법을 뒤집어서 다시 10진법으로 바꾸는 것입니다.

그런데 3진법 기준 끝 숫자부터 list에 저장됨으로 굳이 뒤집을 필요는 없겠습니다.

 

[ 내장함수를 활용한 풀이 ]

def solution(n):
    answer = ''

    while n >= 1:
        n, rest = divmod(n, 3)
        answer += str(rest)

    answer = int(answer, 3)

    return answer

1) divmod() : 몫과 나머지를 같이 반환해주는 함수

2) int(x, base) : base 진법으로 구성된 str 형식의 수를 10진법으로 변환해 줌

                    python의 int 함수는 진법 변환을 지원합니다.

 

 

[ 로직을 코딩한 풀이 ]

def solution(n):
    answer = ''
    result = 0

    while n >= 1:
        rest = n % 3
        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

수기로 진법 변환을 할 수 있으면 어렵지 않게 구현할 수 있습니다.

 

 

[다른 풀이 참고]

def solution(n):
    answer = []
    while True:
        n, rest = divmod(n, 3)
        answer.append(rest)

        if n == 0:
            break

    return sum([i * 3**idx for idx, i in enumerate(reversed(answer))])

list에 int형 숫자를 하나씩 저장해서 풀었네요.

 

이상 3진법 뒤집기 문제풀이였습니다.

반응형

'[Study] > 코딩테스트 연습' 카테고리의 다른 글

[Python] 실패율  (0) 2020.11.09
[Python] 크레인 인형뽑기 게임  (0) 2020.11.08
[Python] 비밀지도  (0) 2020.11.07
[Python] 다트 게임  (0) 2020.11.07
[JAVA] 백준 11053 가장 긴 증가하는 부분 수열  (0) 2020.10.10