문제 설명
자연수 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
'Algorithm > Daily Coding Tests Challenge' 카테고리의 다른 글
[프로그래머스 코딩테스트] lv1. 두 개 뽑아서 더하기 (0) | 2021.08.02 |
---|---|
[프로그래머스 코딩테스트] lv1. 예산 (0) | 2021.08.02 |
[프로그래머스 코딩테스트] lv1. 실패율 (0) | 2021.07.30 |
[프로그래머스 코딩테스트] lv1. 약수의 개수와 덧셈 (0) | 2021.07.30 |
[프로그래머스 코딩테스트] lv1. 소수 구하기 (0) | 2021.07.30 |