개발 노트/알고리즘 문제
백준 1629 곱셈 (실버 1)
LeeInGyu
2025. 4. 20. 07:09
백준 1629 곱셈 (실버 1)
링크: 1629 곱셈
접근 방법
- (시간 초과) 반복문으로 계산하고 그 중간 과정에 C로 나눔
- (정답) 분할 정복으로 지수를 나눠서 계산
소스 코드
소스 코드: 93356067 제출
A, B, C = map(int, input().split())
# print(pow(A, B, C)) 정답
def divide(A: int, B: int) -> int:
if B == 0:
return 1
half = divide(A, B//2)
if B % 2 == 0:
return (half * half) % C
else:
return (half * half * A) % C
print(divide(A, B))
A | B | C | return |
---|---|---|---|
10 | 11 | 12 | |
''' | 5 | ''' | |
''' | 2 | ''' | |
''' | 1 | ''' | |
''' | 0 | ''' | 1 |
''' | 1 | ''' | 10 |
''' | 2 | ''' | 4 |
''' | 5 | ''' | 4 |
''' | 11 | ''' | 4 |
최종값 | 4 |
- 솔직히 감이 잘 오지 않아서 비공개 처리했다..
코드 개선 사항(GPT 4o)
결론
- 분할 정복 문제를 마주칠 때마다 감이 전혀 안잡힌다.
- 그리고 분할 정복을 써야하는 이유를 들었을 때도 오... 음.. 그런가.. 싶다.. ㅋㅋ
- 분할 정복 문제가 귀했는데, 문제 복잡도가 낮았어서 쉽게 날린 것 같아 아쉽다 ㅠ
728x90
반응형