본문 바로가기
백준

백준 2230번 수 고르기 (c++)

by 딴짓거리 2025. 2. 22.

오랜만에 투 포인터 문제를 몇개 풀어보기로 하여 맛보기 문제

 

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