티스토리 뷰
728x90
프로그래머스 코딩 테스트 3진법 뒤집기를 풀어보겠습니다!
최종 결과
1
2
3
4
5
6
7
8
9
10
|
def solution(n):
conversion = '';
while True:
conversion = str(n%3) + conversion
n = n//3
if n==0: break
answer = 0;
for i in range(len(conversion)):
answer += int(conversion[i]) * 3**i
return answer
|
풀이
문제설명
자연수 n이 매개변수로 주어집니다.
n을 3진법 상에서 앞뒤로 뒤집은 후,
이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
즉 10진수 n을 3진수로 바꿈 → 바뀐 3진수를 뒤집음 → 다시 10진수로 바꿔서 return
1. 10진수n을 3진수로 바꾸기
진법을 바꾸는 알고리즘은 다음에 다시 글을 쓰도록 하겠습니만,
간단하게 알고 싶으시다면 아래 '더보기'를 눌러주세요.
더보기
10진수를 n진수로 변환 한다면, (n>1) 바꾸고자 하는 10진수를 n으로 몫이 0이 될 때 까지 나눠주고, 나머지를 아래 방향부터 읽어주면 됩니다. |
따라서 아래 코드로 10진수 n이 3진수로 바꿔지는걸 확인할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
|
n = 45
conversion = ''
while True:
conversion = str(n%3) + conversion
n = n//3
if n==0: break # 나머지가 0이 되면 반복문 종료
print(conversion)
# 결괏값: 1200
|
2. 3진수 역순의 불필요성과 최종 10진수 변환
저희가 최종적으로 하고자 하는 것은, 10진수를 출력 하는 것입니다.
그럼 굳이 바꾼 1번에서 바꾼 3진수를 역순할 필요가 없음을 알 수 있습니다.
다시 10진수로 바꿀 때 이를 고려하고 계산해주면 되기 때문 입니다.
3진수를 10진수로 바꾸려면 3진수 각 자리에 3^(n번째 자리수)를 해 주시면 됩니다.
1
2
|
for i in range(len(conversion)):
answer += int(conversion[i]) * 3**i
|
더보기
프로그래머스, 코딩 테스트, 알고리즘, 3진수, 진법, 변환, python, 파이썬, Python, 뒤집기,
반응형
댓글