3진법_프로그래머스_파이썬

3진법

  • 사전지식
    • np.zeros
    • // 몫구하기
    • ** 제곱
    • %나머지
    • while
  • np.zeros: 0으로 만들어진 리스트를 반환
np.zeros(shape=(5,),dtype=np.int8) 
array([0, 0, 0, 0, 0], dtype=int8)
  • // 몫구하기
5//2
2
1//2
0
  • ** 제곱
3**2
9
  • %나머지
3%2
1
1%4
1
  • while: 조건을 만족하지 않을 때 까지 수행합니다.
n = 5
sum_ = 0
while n>1:
    sum_+=n
    n-=1
print(sum_)
14

5부터 2까지만 더해지는 것을 볼 수 있습니다.

def solution(n):
    answer = 0
    y = 0
    for i in range(17,-1,-1):
        if n//(3**i) >= 1: 
            y = i
            break
        
    thr = np.zeros(shape=(y+1,),dtype=np.int8) 
    
    for j in range(y, -1, -1):
        if n//(3**j) >=1 : 
            thr[j] = n//(3**j)
            n = n - (n//(3**j))*(3**j)
        elif n//(3**j) == 0 :
            thr[j] = 0
            
    for k in range(len(thr)) :
        answer += thr[k]*(3**(len(thr)-1-k))
    return answer
    

  • 다른 사람 풀이
def solution(n):
    tmp = ''
    while n:
        tmp += str(n % 3)
        n = n // 3
        print(tmp)

    answer = int(tmp, 3)
    return answer

Comments