백준/증가수열 & 투포인터

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

배발자 2022. 2. 16.
반응형

투포인터 문제이다. 

 

접근 방법

1. 벡터 오름차순 정렬 및 start, end 포인터 생성 후 0으로 초기화

2. result 값은 벡터 원소중 최솟값과 최댓값의 차이값으로 저장 

3. end포인터의 벡터 원소값이 m보다 작으면 end 포인터 증가 

4. end포인터의 벡터 원소값이 m보다 크거나 같다면 result 최솟값 갱신 (차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램)

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std; 
int main() {
	int n, m; 
	cin >> n >> m; 
	vector <int> v(n); 
	for (int i = 0; i < n; i++)cin >> v[i]; 
	sort(v.begin(), v.end()); 
	int s, e; 
	s = 0; e = 0;
	int result = v[n-1]-v[0]; 
	while (s < n && e < n) {
		int x = v[e] - v[s]; 
		if (x < m) {
			e++; 
		}
		else {
			result = min(result, v[e] - v[s]); 
			s++; 
		}
	}
	cout << result; 
}

 

 

2230번: 수 고르기

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

www.acmicpc.net

반응형

댓글