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

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

배발자 2022. 1. 27.
반응형

투포인터 문제다. 

 

1. 입력된 모든 값을 벡터에 저장한 후 오름차순으로 정렬시킨다. 

2. 인덱스의 시작점, 인덱스의 끝점을 저장 시킨다. 

- 시작점과 끝점에 해당하는 원소가 같으면 시작점만 오른쪽으로 이동 

- 시작점과 끝점에 해당하는 원소의 합이 X의 값과 같으면 카운트 및 시작점 오른쪽으로 이동.

- 시작점과 끝점에 해당하는 원소의 합이 X의 값보다 작으면 끝점 왼쪽으로 이동. 

- 시작점과 끝점에 해당하는 원소의 합이 X의 값보다 크면 시작점 오른쪽으로 이동.

 

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

 

 

3273번: 두 수의 합

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

www.acmicpc.net

 

반응형

댓글