본문 바로가기
Python 알고리즘 공부/프로그래머스 코딩테스트 연습

3진법 뒤집기 (python)

by 두 그루 2023. 8. 2.

https://school.programmers.co.kr/learn/courses/30/lessons/68935

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

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

 

제한사항

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

code

# Lv.1
# 3진법 뒤집기
def solution(n):
    answer_3 = ''
    temp = n
    while temp > 0:
        answer_3 += str(temp % 3)
        temp = temp // 3
    answer_10 = 0
    for i in range(1, len(answer_3) + 1):
        answer_10 += int(answer_3[-i]) * (3 ** (i - 1))
    return answer_10

https://github.com/soaringwave/Python-algorithm-studying/blob/main/programmers/Lv.1/change_notation_and_flip.py

 

알고리즘

    answer_3 = ''
    temp = n
    while temp > 0:
        answer_3 += str(temp % 3)
        temp = temp // 3

위 코드를 통해 삼진법으로 변환하고 앞뒤를 바꾼 값은 answer_3에 저장한다. 0과 같은 정보를 살리고자 문자열을 이용했고, 문제에서 요구하는 3진법 변환 후 뒤집기를 한 번에 실행했다.

 

	answer_10 = 0
   	for i in range(1, len(answer_3) + 1):
        answer_10 += int(answer_3[-i]) * (3 ** (i - 1))

그리고 10진법으로 표현하고자 문자열의 글자 하나하나를 3의 제곱수와 곱해서 answer_10에 더했다. 

 

피드백

def solution(n):
    tmp = ''
    while n:
        tmp += str(n % 3)
        n = n // 3

    answer = int(tmp, 3)
    return answer

다른 사람의 풀이 중 하나로, int를 활용해 십진법으로 훨씬 간단하게 풀은 방법도 있다.

댓글