Algorithm(알고리즘)/백준
02. 거듭 제곱 계산 함수 (x ** y)
반응형
02. 거듭 제곱 계산 함수 (x ** y)
(1) 시간 복잡도 O(y)-1
def power(x, y):
total = 1
# x를 y번 곱해 준다
for i in range(y):
total *= x
return total
# 테스트
print(power(3, 5))
print(power(5, 6))
print(power(7, 9))
# 결과
# 243
# 15625
# 40353607
(2) 시간 복잡도 O(y)-2
def power(x, y):
if y == 1:
return x
elif y>1:
x = x * power(x,y-1)
return x
# 테스트
print(power(3, 5))
print(power(5, 6))
print(power(7, 9))
# 결과
# 243
# 15625
# 40353607
(3) 시간 복잡도 O(lg y)
def power(x, y):
if y == 0:
return 1
# 계산을 한 번만 하기 위해서 변수에 저장
subresult = power(x, y // 2)
# 문제를 최대한 똑같은 크기의 문제 두 개로 나눠준다 (짝수, 홀수 경우 따로)
if y % 2 == 0:
return subresult * subresult
else:
return x * subresult * subresult
# 테스트
print(power(3, 5))
print(power(5, 6))
print(power(7, 9))
# 결과
# 243
# 15625
# 40353607
<참고>
# y가 8인 경우 함수가 4번 호출되고, y가 32인 경우 6번 호출
power(2, 8)
power(2, 4)
power(2, 2)
power(2, 1)
반응형
'Algorithm(알고리즘) > 백준' 카테고리의 다른 글
06. 주식 최대 수익 함수 (0) | 2021.05.22 |
---|---|
05. 투자의 귀재, 합 구간이 가장 큰 함수 (0) | 2021.05.22 |
04. 첫번째로 중복되는 항목 찾기 1 (0) | 2021.05.22 |
03. 빠르게 산 오르기(약수터문제) (0) | 2021.05.16 |
01. 최대 합 구간을 구하는 함수(Brute Force) (0) | 2021.05.16 |
댓글