본문 바로가기
Tests/프로그래머스

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

by 코딩하는 금융인 2021. 3. 6.

문제. 프로그래머스 3진법 뒤집기


문제 설명

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


제한사항

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

입출력 예

n result
45 7
125 229

입출력 예 설명

입출력 예 #1

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

입출력 예 #2

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

출처 : 프로그래머스 3진법 뒤집기

 

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

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

programmers.co.kr


나의 풀이 in Python3

#[Programmers] 월간 코드 챌린지 시즌1 > 3진법 뒤집기

# 진수 변환기 생성
Notice = '0123456789A'
def num_sys(n,b):
    q, r = divmod(n,b) # 몫, 나머지
    n = Notice[r]
    return num_sys(q,b) + n if q else n
    
def solution(n):
    n = int(str(num_sys(n,3))[::-1],3)
    answer = int(num_sys(n,10))
    return answer

3진법 뒤집기 문제는 어떻게 생각하느냐에 따라 다르게 풀 수 있는 문제 같습니다.

저는 상당히 어렵게 접근을 해봤는데

먼저, 진수 변환기 함수를 생성하고 이 함수를 가지고 조건에 따라 3진수 그리고 10진수로 변환하여 풀어봤습니다.

 

하지만, 다른 사람의 풀이를 보고 파이썬 내장 함수인 int를 활용하면 훨씬 쉽게 풀 수 있었는데 라는 생각을 하게 됐습니다 ㅋㅋㅋ

 

다른 사람의 풀이

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

    answer = int(tmp, 3)
    return answer

while문으로 3진수를 거꾸로 넣고 이를 int(tmp, 3)을 통해 3진수를 10진수로 변환시켜 쉽게 풀 수 있었습니다.

아직 제 실력이 한참 못 미치고 굳이 어려운 구문보다는 간결하고 쉬운 코딩으로 이러한 문제들을 손쉽게 풀 수 있다는 것을 또 한 번 느낄 수 있었습니다. ㅠㅠ

반응형

댓글