728x90
9613번: GCD 합
첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있다. 각 테스트 케이스는 수의 개수 n (1 < n ≤ 100)가 주어지고, 다음에는 n개의 수가 주어진
www.acmicpc.net
GitHub - minyoung529/AlgorithmStudy: 여러 알고리즘 문제를 푸는 저장소입니다.
여러 알고리즘 문제를 푸는 저장소입니다. Contribute to minyoung529/AlgorithmStudy development by creating an account on GitHub.
github.com
가능한 모든 쌍의 GCD의 합을 구하는 문제.
킹클리드 호제법과 재귀함수를 써서 풀수 있었다.

이러한 알고리즘을 설계했다.
짜본 재귀 함수의 코드
int GetGCD(int curIndex, int nextIndex, vector<int> arr, int sum)
{
// 비교할 값이 없으면 멈춘다
if (nextIndex >= arr.size())
{
return 0;
}
int a = arr[curIndex];
int b = arr[nextIndex];
// 유클리드 호제법
while (b != 0)
{
int temp = a % b;
a = b;
b = temp;
}
// 각 GCD를 합해서 반환
return a + GetGCD(curIndex, nextIndex + 1, arr, a);
}
재귀 호출
for (int j = 0; j < count - 1; j++)
answer += GetGCD(j, j + 1, arr);
재미있었던 문제이다. 오랜만에 재귀함수를 써서 더 재밌었다... ㅎㅎ
728x90
'알고리즘 문제풀이 > 수학' 카테고리의 다른 글
| [백준][C++] 21275 폰 호석만 (0) | 2022.11.04 |
|---|---|
| [백준][C++] 2960 에라토스테네스의 체 (0) | 2022.11.04 |
| [백준][C++] 1934 최소공배수 (1) | 2022.11.04 |
| [백준][C++] 1110 진법 변환 (0) | 2022.11.04 |
| [백준][C++] 2745 진법 변환 (0) | 2022.11.04 |