Koala - 10기/코딩테스트 준비 스터디

[백준/C++] 2230번 : 수 고르기

_dudu 2023. 3. 25. 22:16

 

문제 풀이

  • 투 포인터 문제
  • start, end 두개의 포인터를 조작해서 구현한다.
  • 두 수의 차가 원하는 결과보다 작다면 end를 증가시킨다(큰 수가 증가된다)
  • 두 수를 비교하여 값의 차이를 이용해 답을 도출한다. 

 

문제 코드

#include <iostream>
#include <algorithm>
using namespace std;

int n, m;
int a[100005];
int mn = 0x7fffffff;

int main() {
  ios::sync_with_stdio(0);
  cin.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; // en이 범위를 벗어날 시 종료
    mn = min(mn, a[en] - a[st]);
  }
  cout << mn;
}

 

 

https://www.acmicpc.net/problem/2230

 

2230번: 수 고르기

N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어

www.acmicpc.net