문제 설명
문제 해결
10진수로 표현된 숫자를 어떻게 3진수로 바꿀 수 있을지 생각해야 한다.
일단 10진수, 3진수 대응표를 그려봤다.
어떤 특징이 보일까? 3의 n(자연수)제곱 관련 숫자들이 나타날 때마다 자리수가 바뀌는 양상을 띄고 있다.
일단 문제의 자연수 n이 3보다 낮을 때는 기존의 10진수와 결과가 동일하다.
자연수 n이 3보다 높다면, 실질적인 10진수 -> 3진수 변환 작업을 진행한다.
결과를 담을 문자열 변수를 생성하고 n을 3으로 나눈 몫과 나머지를 구한다.
나머지를 문자로 변환하여 결과 앞에 붙여준다.
작업을 반복하다가 3으로 나눈 몫이 3보다 작다면 변환 작업이 마무리되어야하므로 앞에 n을 붙여주고 마무리한다.
def base10_to_base3(n):
if n < 3 :
return str(n)
else:
res = ""
while n // 3:
r = n % 3
n = n // 3
res = str(r) + res
if n < 3 :
res = str(n) + res
return res
아래 사진은 이해를 돕기 위한 사진이다.
실제로 구현한 내용을 적용해보면 잘 동작한다.
원래 base3_to_base10 함수를 구현할 때 문자열을 거꾸로 뒤집어야 제대로 변환된 결과가 나오겠지만
문제에서는 3진수 결과를 거꾸로 뒤집은 결과를 10진수로 구하라고 했기 때문에 코드를 이런 식으로 작성했다.
def base10_to_base3(n):
if n == 1 or n == 2:
return str(n)
res = ""
while n // 3:
r = n % 3
n = n // 3
res = str(r) + res
if n < 3:
res = str(n) + res
return res
def base3_to_base10(s):
res = 0
for i in range(len(s)):
res += int(s[i]) * (3 ** i)
return res
def solution(n):
answer = base3_to_base10(base10_to_base3(n))
return answer
'Algorithm > 프로그래머스 연습 문제' 카테고리의 다른 글
프로그래머스 / 코딩 테스트 / 같은 숫자는 싫어 (0) | 2020.12.24 |
---|---|
프로그래머스 / 코딩 테스트 / 가운데 글자 가져오기 (0) | 2020.12.24 |
프로그래머스 / 코딩 테스트 / 직사각형 별찍기 (0) | 2020.12.24 |
프로그래머스 / 코딩 테스트 / 행렬의 덧셈 (0) | 2020.12.24 |
프로그래머스 / 코딩 테스트 / 핸드폰 번호 가리기 (0) | 2020.12.24 |