알고리즘 문제풀이/백준

[백준 2230] 수 고르기

홍시홍 2020. 3. 30. 21:29

분류 : 정렬

 

요구사항

두 수를 골랏을때 차이가 m이상인 두 수중 차이가 최소인 값 구하기

 

풀이

1. 정렬한다

2. low ,high를 잡아 조건대로 계산한다

3. m이상일 경우 low 증가, 아닐경우 high 증가

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
using namespace std;
int n;
long long m;
vector<int> v;
long long ans = 20000000001;
int main() {
	//cout << ans << endl;
	scanf("%d%lld", &n, &m);
	for (int i = 0; i < n; i++) {
		int x;
		scanf("%d", &x);
		v.push_back(x);
	}
	sort(v.begin(), v.end());
	int low = 0;
	int high = 0;
	int flag = 0;
	while (low<n && high<n) {
		long long diff = abs(v[high] - v[low]);
		if (diff >= m) {
			ans = min(ans, diff);
			if (high <v.size())
				low++;
		}
		else {
			if (low < v.size())
				high++;
		}
	}
	//cout << "!" << endl;
	cout << ans << endl;
}