BOJ/투포인터

[C/C++] 백준 - 3273번 : 두 수의 합

JWonK 2021. 9. 24. 13:05
728x90
반응형

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

 

3273번: 두 수의 합

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는

www.acmicpc.net

투 포인터를 사용하여 해결할 수 있는 문제이다.

서로 다른 인덱스 2개의 값으로 만든 값이 찾고자 하는 값과 같은지 확인해야하므로

left < right 이런 식으로 작성이 되어야 한다.

나도 이분탐색처럼 left <= right이렇게 작성해서 몇 번 틀렸다

#include <iostream>
#include <queue>
#include <vector>
#include <stack>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
#include <map> 
#include <algorithm>
#include <cmath>
#define CUNLINK ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define ENDL cout << endl
#define ll long long
#define INF 987654321
#define Mod 1000000009
#define endl '\n'
#define pil pair<int,int>

using namespace std;


int main() {
	CUNLINK;
	int N, X, Cnt = 0;
	cin >> N;
	vector<int> v(N, 0);
	for (int i = 0; i < N; i++) {
		cin >> v[i];
	}
	cin >> X;
	sort(v.begin(), v.end());
	int l = 0, r = v.size() - 1;
	while (l < r) {
		int val = v[l] + v[r];
		if (val == X) {
			Cnt++;
			l++;
		}
		else if (val < X) {
			l++;
		}
		else {
			r--;
		}
	}
	cout << Cnt;
	
	return 0;
}
728x90
반응형