반응형
투포인터 문제다.
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
반응형
'백준 > 증가수열 & 투포인터' 카테고리의 다른 글
[백준 1911번 / C++] 흙길 보수하기 (0) | 2022.02.09 |
---|---|
[백준 2170번 / C++] 선 긋기 (0) | 2022.02.09 |
[백준 2670번 / C++ ] 연속부분최대곱 (0) | 2022.02.08 |
[백준 1644번 / C++] 소수의 연속합 (0) | 2022.01.19 |
[백준 7795번 / C++] 먹을 것인가 먹힐 것인가 (0) | 2022.01.18 |
댓글