BOJ 1629
문제
아이디어
- 단순하게 Python으로 A의 B승을 구하여 C로 나눈 나머지를 출력
- 시간초과
- 반복문으로 A에 B를 곱해주며 매번 C를 나눠준다
- 시간초과
- 나머지가 생기는 규칙적인 패턴이 있으므로 패턴을 찾아서 접근
- 시간초과
- 시간초과
- 시간초과
- 시간초과
아무리 생각해도 시간초과를 발생시키지 않고 풀지 못하겠어서 검색하였다.
참고
코드
#include <iostream>
long long getExponent(int a, int b, int c)
{
if (b == 0) {
return 1;
}
return (b % 2 == 1) ? (getExponent(a, b/2, c) * getExponent(a, b/2, c) % c * a % c) : (getExponent(a, b/2, c) * getExponent(a, b/2, c) % c);
}
int main(void)
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
printf("%lld\n", getExponent(a, b, c));
return 0;
}
리뷰
- 전형적인 재귀함수를 사용한 분할정복 문제
- 큰 수에 접근하는 문제면 분할정복을 사용해야 하지만 매번 까먹는다.
Author And Source
이 문제에 관하여(BOJ 1629), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@kimjaeseop/BOJ-1629
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <iostream>
long long getExponent(int a, int b, int c)
{
if (b == 0) {
return 1;
}
return (b % 2 == 1) ? (getExponent(a, b/2, c) * getExponent(a, b/2, c) % c * a % c) : (getExponent(a, b/2, c) * getExponent(a, b/2, c) % c);
}
int main(void)
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
printf("%lld\n", getExponent(a, b, c));
return 0;
}
- 전형적인 재귀함수를 사용한 분할정복 문제
- 큰 수에 접근하는 문제면 분할정복을 사용해야 하지만 매번 까먹는다.
Author And Source
이 문제에 관하여(BOJ 1629), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimjaeseop/BOJ-1629저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)