https://www.acmicpc.net/problem/2230
1. 의사코드
/*
* 투포인터
* 1.정렬
* 2.for(st=0~n)
* 3. while(en범위쳌 && 조건만족안하면) en++
* 4. 정답갱신
*/
en을 1칸씩 우측으로 옮겨가면서 탐색한다.
2. 전체코드
#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[100004];
int ret = 0x7fffffff;
/*
* 투포인터
* 1.정렬
* 2.for(st=0~n)
* 3. while(en범위쳌 && 조건만족안하면) en++
* 4. 정답갱신
*/
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m;
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
sort(a, a + n);
int en = 0;
for (int st = 0; st < n; ++st) {
while (en < n && a[en] - a[st] < m) en++;
if (en == n) break; //범위쳌
ret = min(ret, a[en] - a[st]);
}
cout << ret;
}
'Algorithm > 투포인터' 카테고리의 다른 글
백준 22862 c++ // 투포인터 응용방법(db 이용) (0) | 2023.11.17 |
---|---|
백준 13144 List Of Unique Numbers c++ // 투포인터, 배열활용 (0) | 2023.11.14 |
백준 2003 수들의합2 c++ // 투포인터 정석풀이 (0) | 2023.11.13 |
백준 1644 소수의연속합 c++ // 소수판별 알고리즘, 투포인터 (0) | 2023.11.13 |
백준 1806 부분합 c++ // 투포인터, 누적합 구현방법 (0) | 2023.11.06 |