WIL&TIL/TIL
20230426 TIL - 시크릿키, 알고리즘, divmod()
코드뭉치
2023. 4. 27. 01:20
2️⃣ 알고리즘
더보기
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) 형태로 반환