홍시홍의 프로그래밍

[백준 2230] 수 고르기 본문

알고리즘 문제풀이/백준

[백준 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;
}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 2022] 사다리  (0) 2020.04.04
[백준 2406] 안정적인 네트워크  (0) 2020.03.31
[백준 2012] 등수 매기기  (0) 2020.03.30
[백준 1063] 킹  (0) 2020.03.30
[백준 11812] K진 트리  (0) 2020.03.30
Comments