[백준17087] 숨바꼭질 6 (C++)

1108 단어 ps백준ps

BOJ 바로가기

#include <iostream>
using namespace std;
long long arr[100000];
long long newarr[100000];
long long gcd(long long, long long);
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int n; cin >> n;
	long long x; cin >> x;
	/*동생들의 위치를 arr에 저장
	수빈이와 각 동생들 사이 거리를 newarr에 저장*/
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
		if (x > arr[i])
			newarr[i] = x - arr[i];
		else
			newarr[i] = arr[i] - x;
	}
	// 최대공약수 구하기
	int i = 1;
	if (n == 1) // 동생이 한 명일 경우
		cout << newarr[0];
	// 동생이 두 명 이상일 경우 (수 n개의 최대공약수 구하기)
	else {
		while (1) {
			newarr[i] = gcd(newarr[i - 1], newarr[i]);
			if (i == n - 1) {
				cout << newarr[i];
				break;
			}
			i++;
		}
	}
	return 0;
}
long long gcd(long long a, long long b) {
	if (b == 0)
		return a;
	return gcd(b, a % b);
}

좋은 웹페이지 즐겨찾기