- 두 수의 GCD를 구해주는 GCD 함수를 정의하고
int GCD(int x, int y) {
while(true) {
if(x>y) {
x = x%y;
if(x==0) return y;
} else {
y = y%x;
if(y==0) return x;
}
}
}
- 연속한 데이터끼리 GCD를 구한다, 반복적으로 적용하기 위해 cyclic하게 동작할 수 있는 Queue 자료형 활용
- Queue에 데이터가 한 개 남는다면 그것이 GCD 일 것. (최적화: GCD 리턴값 1이면 바로 break)
queue<int> q; // data
int x1, x2, gcd;
while(true) {
x1 = q.front();
q.pop();
if(q.empty()) {
gcd = x1;
break;
}
x2 = q.front();
q.pop();
q.push(GCD(x1,x2));
}
- 순서대로 앞에서부터 쭉 비교해도 되겠다
gcd = GCD(v[0], v[1]);
for(int i=2; i<N; i++) {
gcd = GCD(gcd, v[i]);
if(gcd==1) break;
}
'BOJ' 카테고리의 다른 글
[C++] user input 숫자인지 문자인지 파악하기, map 자료형 카운터처럼 사용하기 (0) | 2023.08.15 |
---|---|
[C++] 시간 초과 꿀팁, binary search, 벡터 원소 삭제, set 자료형, map 자료형 (0) | 2023.08.15 |
[C++] vector 정렬/안정정렬, vector 중복요소 제거, pair 자료형 (0) | 2023.08.11 |
[C++] nlogn sorting 알고리즘 구현 (0) | 2023.08.10 |
[C++] cin.eof() (0) | 2023.05.05 |