본문 바로가기
WIL&TIL/TIL

20230426 TIL - 시크릿키, 알고리즘, divmod()

by 코드뭉치 2023. 4. 27.

1️⃣ Django 시크릿 키 분리 방법 3가지

 

2️⃣ 알고리즘

3진법 뒤집기

더보기

 1. while문에서 3진법으로 n을 바꿔준다. 이때 이미 뒤집힌 형태로 나오므로, 다시 뒤집어줄 필요가 없다.

     이후 for문을 통해 자릿수에 맞게 곱해서 답에 더해주었다.

def solution(n):
    a = n
    b = []
    while a >= 1:
        b.append(a % 3)
        a = a // 3
    answer = 0
    for i in range(len(b)):
        answer += b[i] * (3 ** (len(b) - i - 1))
    return answer

 

 2. 재귀함수를 사용한 방법

# 재귀함수로 3진법 > 10진법 후 리버스
def dec_to_tri_reversed(number,str_tri=''):
    if number==0: return str_tri
    return dec_to_tri_reversed(number//3,str_tri+str(number%3))

# 재귀함수로 3진법 > 10진법
def tri_to_dec(str_tri, number=0,idx=0):
    if idx==len(str_tri): return number
    return tri_to_dec(str_tri, number+(3**idx)*int(str_tri[len(str_tri)-idx-1]),idx+1)

# 제출용 함수
def solution(n):
    answer = tri_to_dec(dec_to_tri_reversed(n), number=0,idx=0)
    return answer

 

3. divmod 사용하는 방법

def solution(n):
    reverse_base3 = ''
    while n > 0:
        n, r = divmod(n, 3)
        reverse_base3 += str(r)
    answer = int(reverse_base3, 3)
    return answer

 

 

 

3️⃣ divmod(a, b)

나눗셈의 몫과 나머지를 한번에(!) 구해주는 함수

//와 %를 동시에 해준다고 생각하면 된다.

a = 9
b = 2

print(a//b, a%b)
# 4 1

print(divmod(a, b))
# (4, 1)


첫번째 숫자를 두번째 숫자로 나눈 몫과 나머지를 튜플(tuple) 형태로 반환

 

댓글