https://www.acmicpc.net/problem/2230
문제 설명
n개의 정수로 이루어진 수열이 주어진다.
이 수열 중 두 수를 골랐을 때 그 차이가 M이상이면서 제일 작은 경우를 구하는 문제이다.
주요 로직
1. 투 포인터
수열을 정렬한 다음에 i와 j를 선언해 탐색하면서 최적의 값을 찾아 낸다
2. 최솟값 설정
- 1,000,000,000 <= A[i] <= 1,000,000,000까지의 범위를 가지기 때문에 최솟값의 max는 2,000,000,000 정도가 된다.
정답 코드
#include <bits/stdc++.h>
using namespace std;
int n,m,x;
vector<int> v;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> n >> m;
for(int i=0; i<n; i++){
cin >> x;
v.push_back(x);
}
sort(v.begin(), v.end());
int i=0, j=0;
int mn = 2000000005;
while(i <= j && j < v.size()){
int p = abs(v[i] - v[j]);
if(p >= m){
mn = min(mn, p);
i++;
}else{
j++;
}
}
cout << mn << "\n";
return 0;
}
'PS' 카테고리의 다른 글
[백준] 10026번 적록색약 (C++) (0) | 2025.01.13 |
---|---|
[백준] 4863번 섬의 개수 (C++) (0) | 2025.01.12 |
[백준] 2661번 좋은 수열 (C++) (0) | 2025.01.04 |
[백준] 11660번 구간 합 구하기5 (C++) (0) | 2024.12.08 |
[백준] 14889번 스타트와 링크 (C++) (0) | 2024.10.21 |