오랜만에 투 포인터 문제를 몇개 풀어보기로 하여 맛보기 문제
cin >> n >> m;
for (int i = 0; i < n; i++)
{
int a;
cin >> a;
arr.push_back(a);
}
sort(arr.begin(), arr.end());
먼저 데이터를 받아 정렬해놓는다
int s{ 0 };
int e{ 0 };
int ans = 2100000000;
while (s <= e && e<n)
{
int a = arr[s];
int b = arr[e];
int num = b - a;
if (num > m)
{
ans = min(ans, num);
s++;
}
else if (num < m)
{
e++;
}
else
{
ans = m;
break;
}
}
cout << ans << endl;
포인터 두개, 시작 인덱스와 끝 인덱스를 0으로 설정하고 투포인터를 시작한다
선택된 두 수의 차이가 m보다 작으면 끝 인덱스를 한칸 키워 값을 올려주고,
m보다 크면 정답을 갱신하고 혹시 m과 더 가까운 답이 존재할 수 있으므로 시작 인덱스를 한칸 키워 차이를 줄여준다
'백준' 카테고리의 다른 글
백준 2352번 반도체 설계 (c++) (0) | 2025.02.26 |
---|---|
백준 14786번 Ax+Bsin(x)=C (c++) (0) | 2025.02.25 |
백준 14583번 이음줄 (c++) (0) | 2025.02.20 |
백준 2987번 사과나무 (c++) (0) | 2025.02.19 |
백준 16958번 텔레포트 (c++) (0) | 2025.02.18 |