얼렁뚱땅 스며드는 Data Science

Algorithm/Daily Coding Tests Challenge

[프로그래머스 코딩테스트] lv1. 3진법 뒤집기

Jesip14 2021. 8. 2. 14:05

문제 설명

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

입출력 예 설명

입출력 예 #1

  • 답을 도출하는 과정은 다음과 같습니다.
n (10진법) n (3진법) 앞뒤 반전 (3진법) 10진법으로 표현
45 1200 0021 7
  • 따라서 7을 return 해야 합니다.

 

나의 풀이

def ToTernary(num):
    result = 0
    pow = 0
    base = 1
    while True:
        k = num // base
        if k >= 3:
            base *= 3
            pow += 1
            
        elif k >= 1 and k <= 2 :
            result += (k * (10 ** (pow)))
            num -= (base * k)
            base = 1
            pow = 0
            
        else:
            break
        
    return result
    
def solution(n):
    answer = ''
    ternary = ToTernary(n)
    
    while ternary > 0:
        answer += str(ternary % 10) 
        ternary = ternary // 10

    return int(answer, 3)

저는 입출력의 예와 같이 하나하나 단계를 걸처 코드를 짰습니다. 하지만 다른 분들의 풀이를 보면 더 간단한 방법으로 해당 단계들을 축소시켜주는 방법을 이용했습니다. 해당 코드는 다음과 같습니다.

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

    return int(answer, 3)

 

3진법으로 구해진 수를 나중에 reverse시켜줘야하므로 이 단계들을 압축하여 위와 같은 코드를 짰습니다. 처음에 이 코드를 보고 허를 찌른듯했습니다... 새삼 다양한 풀이로 접근을 해야겠다는 반성을 하는 문제였습니다.

 

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/68935

 

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

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

programmers.co.kr