[BOJ/C++] 2470 두 용액 : Two Pointer

Hanbi·2023년 3월 21일
0

Problem Solving

목록 보기
58/108
post-thumbnail

문제

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

풀이

  1. start포인터는 0으로, end포인터는 N-1로 초기화

    (start포인터와 end포인터가 엇갈리기 전까지 반복)

  2. 합이 최솟값보다 작으면 최솟값 변경해주기

  3. 합이 음수면 start포인터를 이동시켜 값을 크게 해주기

  4. 합이 양수면 end포인터를 이동시켜 값을 작게 해주기

코드

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
	int N;
	cin >> N;
	vector<int> v(N);
	vector<int> ans(2);

	for (int i = 0; i < N; i++) {
		cin >> v[i];
	}
	sort(v.begin(), v.end()); //양쪽 끝에서 포인터 이동하는 경우는 정렬 해주기!


	/* 투포인터 알고리즘 */
	int start = 0, end = N-1, min = 2000000000;
	while (start < end) {
		int sum = v[start] + v[end];

		if (min > abs(sum)) {
			min = abs(sum);
			ans[0] = v[start];
			ans[1] = v[end];
		}

		if (sum < 0)	start++;
		else end--;
	}

	sort(ans.begin(), ans.end());
	cout << ans[0] << " " << ans[1];

	return 0;
}
profile
👩🏻‍💻

0개의 댓글