728x90
728x90
거듭 제곱 빨리 구하기
거듭 제곱을 계산하는 함수 power를 작성하고 싶습니다. power는 파라미터로 자연수 x와 자연수 y를 받고, xy를 리턴합니다. 가장 쉽게 생각할 수 있는 방법은 반복문으로 단순하게 x를 y번 곱해 주는 방법입니다.
위 알고리즘의 시간 복잡도는 O(y)인데요. O(lgy)로 더 빠르게 할 수 있는 알고리즘을 구현하시오.
주의사항
return x ** y는 답이 아닙니다. 우리는 거듭 제곱을 구하는 원리를 파악하여 효율적인 ‘알고리즘’을 구현하십시오.
❧ 테스트 셋
def power(x, y):
# Code
# Test
print(power(3, 5))
print(power(5, 6))
print(power(7, 9))
❧ 출력 예시
243
15625
40353607
❧ 정답
def power(x, y):
if y == 0:
return 1
if y % 2:
return x * power(x, y // 2) * power(x, y // 2)
else:
return power(x, y // 2) * power(x, y // 2)
print(power(3, 5))
print(power(5, 6))
print(power(7, 9))
1️⃣ 시간 복잡도 : O(logn)
2️⃣ 분할 정복
3️⃣ 홀수인 경우, x를 한번 더 곱해줌
728x90
'📊 Algorithm > Algorithm PS' 카테고리의 다른 글
[알고리즘 일기] 36. 중복되는 항목 찾기 (0) | 2021.06.05 |
---|---|
[알고리즘 일기] 35. 빠르게 산 오르기 (0) | 2021.06.04 |
[알고리즘 일기] 33. 투자 귀재 규식이 1 (0) | 2021.06.02 |
[알고리즘 일기] 32. 전자레인지 (0) | 2021.06.01 |
[알고리즘 일기] 31. 한수 (0) | 2021.06.01 |