알고리즘

[프로그래머스 lv 1] 3진법 뒤집기.py

파뱁 2022. 1. 12. 18:15
728x90

<문제 설명>

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

 

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

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

programmers.co.kr

자연수 n(10진법)을 3진법으로 변환 -> 이 변환 값을 앞뒤 반전 -> 다시 10진법으로 변환

이 것이 이 문제가 요하는 것이다.

 

입출력의 예는 다음과 같다.

n result
45 7
125 229

 

<문제 해결 아이디어>

우선 n을 3진법으로 만드는 과정은 몫이 3보다 작아질 때 까지 나눈 다음 나머지를 1의 자리부터 채우고, 마지막 제일 큰 자리에 몫을 집어 넣으면 된다.

하지만 우리는 어차피 뒤집을 것이기 때문에 String으로 나머지 부터 앞에 더할 것이다.

예) 나머지가 0,0,2 / 몫이 1 일경우 3진법은 1200이지만 저 구한 순서대로 String타입인 변수에 더해주면 0021이라는 뒤집힌 3진수 값이 나온다.

이렇게 뒤집힌 3진수 값이 나오면 이를 반복문으로 다시 10진수로 만들어준다.

 

<문제 풀이 코드>

def solution(n):
    answer = 0
    quotient = int(n/3)
    result = str(n%3)
    
    if(quotient>=3):
        while(quotient>=3):
            result += str(quotient % 3) 
            quotient = int(quotient/3)
        result += str(quotient)
    
        
    for i in range(len(result)):
        answer += int(result[i])*(3**(len(result)-1-i))
    
    return answer

채점 결과

ps. 원래 테스트 케이스 1번을 틀렸는데 그게 처음 n 이 3보다 작을 때를 제대로 고려하지 않아 생긴 문제였다.

이를 해결하기 위해 조건문으로 확실히 풀이를 구분해주었다.

728x90
반응형