본문 바로가기
Programmers/Python

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

by Sin_ 2021. 10. 6.
728x90

안녕하세요 뚜디 입니다 :)

코딩테스트 연습 - 3진법 뒤집기 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr

< 프로그래머스 - 3진법 뒤집기 (LV1) >


1. 연습 문제

2. 문제 풀이

3. 소스 코드

4. 결과


1. 연습 문제
  • 문제 설명
자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
  • 제한 조건
n은 1 이상 100,000,000 이하인 자연수입니다.
  • 입출력 예
n result
45 7
125 229

 

2. 문제 풀이

입출력 예 #1

n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
45 1200 0021 7

입출력 예 #2

n (10진법) n (3진법) 앞뒤 반전(3진법) 10진법으로 표현
125 11122 22111 229
1. 가장 먼저 10진법 -> 3진법으로 변경시 3^a의 a(max)값을 찾는다.
2. 반복문을 통해 입력받은 n의 크기를 줄여나가며 10진법 -> 3진법으로 변경한다.
3. 3진법 -> 10진법으로 변경하는 반복문을 통해 리턴한다.

 

3. 소스 코드
def solution(n):
    answer = 0
    count = 0
    max = 0
    temp = []

    for i in range(n):
        if (n < 3**i):
            max = i - 1
            break;

    while (max >= 0):
        if (n - 3**max >= 0):
            count += 1
            n -= 3 ** max

        if (n - 3 ** max >= 0):
            continue
        else:
            temp.append(count)
            count = 0
            max -= 1

    for i in range(len(temp)):
        answer += temp[i] * 3**i

    return answer

 

4. 결과

728x90