개발/알고리즘

17087 실버 2 ) 숨바꼭질 6 - 유클리드 호제법

차가운콩 2024. 10. 8. 15:27

풀이: 배열을 입력받고 모든 값을 m으로 뺀 절대값으로 변환한다

그리고 모든 수의 최대공약수를 유클리드 호제법으로 구하면 된다

#include <iostream>
#include <cmath>

using namespace std;

int divide(int a, int b) {
	
	if(a % b == 0) {
		return b;
	}
	
	return divide(b, a % b);
}

int main() {
	int n, m;
	
	cin >> n >> m;
	
	int* arr = new int[n+1];
	
	for(int i = 0; i < n; i++) {
		cin >> arr[i];
		
		arr[i] = abs(arr[i] - m);
	}
	
	int cs = arr[0];
	
	for(int i = 1; i < n; i++) {
		if(cs > arr[i]) {
			cs = divide(cs, arr[i]);
		}
		else {
			cs = divide(arr[i], cs);
		}
	}
	
	cout << cs;
}