어흥

[백준 2230] 수 고르기 (C++) 본문

알고리즘/백준

[백준 2230] 수 고르기 (C++)

라이언납시오 2020. 5. 10. 16:54
728x90
반응형

문제 링크: https://www.acmicpc.net/problem/2230

 

2230번: 수 고르기

첫째 줄에 두 정수 N, M(0≤M≤2,000,000,000)이 주어진다. 다음 N개의 줄에는 차례로 A[1], A[2], …, A[N]이 주어진다. 각각의 A[i]는 0 ≤ |A[i]| ≤ 1,000,000,000을 만족한다.

www.acmicpc.net

1. 주의할 점

- 서로 같은 곳을 가리킬 수 있다

- 투 포인터를 이용한다

 

2. 구현

- 입력받은 수를 배열에 저장한 후, 정렬한다

- 투 포인터를 활용하여 L이 가리키는 값과 R이 가리키는 값의 차이를 비교하여 답을 도출한다

#include <iostream>
#include <algorithm>
using namespace std;
long long arr[100000];

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int num;
	long long limit;
	cin >> num >> limit;
	for (int i = 0; i < num; i++)
		cin >> arr[i];
	sort(arr, arr + num);
	int r = 0, l = 0;
	long long diff = 0, result = 2000000001;
	while (l <= r && r < num) {
		if (diff >= limit) {
			result = min(result, diff);
			if (l == r) {
				r++;
				if (r == num) break;
				diff = arr[r] - arr[l];
			}
			else {
				l++;
				diff = arr[r] - arr[l];
			}
		}
		else {
			r++;
			if (r == num) break;
			diff = arr[r] - arr[l];
		}
	}
	cout << result;
	system("pause");
	return 0;
}
728x90
반응형
Comments