본문 바로가기

알고리즘 공부/프로그래머스 > Python3

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

https://programmers.co.kr/learn/courses/30/lessons/68935

 

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

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

programmers.co.kr

 

[정답]

 

1. 진법 계산방법을 사용하여 n이 0이 아닐 동안, n%3을 해주어 리스트 num_3에 넣고 n을 n//3으로 해준다.

만약 n=45일 경우, num_3=[0,0,2,1]이 된다.

( 입출력 예시에서는 3진법으로 바꾸고 앞뒤 반전을 해주어 10진법으로 표현하였는데, num_3자체가 앞뒤 반전을 해준 모양과 같은 리스트이므로 바로 계산을 해주었다. )

2. 0~len(num_3)일 동안 for문 루프를 돌면서, num_3[i]*3**(len(num_3)-i-1)을 answer에 넣어준다.

만약 n=45일 경우, 0~3일동안 for문을 돈다. ( len(num_3)=4/ num_3=[0,0,2,1] )

num_3[0]*3**(4-0-1)=0

num_3[1]*3**(4-1-1)=0

num_3[2]*3**(4-2-1)=2*3**1=6

num_3[3]*3**(4-3-1)=1*3**0=1

answer=7이 된다.


<참고>

이 문제는 "진법 계산방법"을 제대로 이해하면 수월하게 풀 수 있다.

https://blog.naver.com/chanseong1/221512567219

 

10진수를 2진수·8진수·16진수로 계산(정수, 소수의 진법 변환)하는 법!

컴퓨터가 사용하는 0과 1로만 나타내는 이진법.서로 다른 진수들 어떻게 표현하고변환법은 어떻게 하는 걸...

blog.naver.com