문제 링크

요약

  • 쉬운문제

최종

class Solution {
	int getGCD(int a, int b) {
		while (b) {
			int rem = a % b;
			a = b;
			b = rem;
		}
		return a;
	}
public:
	long long gcdSum(vector<int>& nums) {
		int n = nums.size();
		vector<int> prefix_gcd(n);
		int mx = nums[0];
		long long ret = 0;
 
		prefix_gcd[0] = nums[0];
 
		for (int i = 1; i < n; i++) {
			mx = max(mx, nums[i]);
			prefix_gcd[i] = getGCD(mx, nums[i]);
		}
 
		sort(prefix_gcd.begin(), prefix_gcd.end());
 
		for (int l = 0; l < n; l++) {
			int r = n - l - 1;
 
			if (l < r) {
				ret += getGCD(prefix_gcd[l], prefix_gcd[r]);
			}
		}
 
		return ret;
	}
};