반응형
투포인터를 활용한 문제이다.
두개의 재료가 합쳐져서 M이라는 값과 일치해야만 갑옷이 만들어진다는 점을 고려해서 풀어보자.
1. 벡터에 재료들의 고유번호를 오름차순으로 정렬해서 저장한다.
2. 첫번째 원소와 마지막번째 원소를 S와 E라는 변수에 각각 저장한다.
3. 벡터의 S 포인터의 원소와 E 포인터의 원소를 더했을 때 M인지를 확인한다.
- M보다 작다면 S의 값을 올려준다 (원소의 값을 증가시키는 역할)
- M보다 크다면 E의 값을 내려준다 (원소의 값을 감소시키는 역할)
- M가 일치하면 RESULT 값을 증가시켜 준다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m;
vector <int> v;
cin >> n >> m;
for (int i = 0; i < n; i++) {
int a; cin >> a;
v.push_back(a);
}
sort(v.begin(), v.end());
int s, e;
s = 0;
e = v.size() - 1;
int result = 0;
while (s < e) {
if (v[s] + v[e] < m) s++;
else if (v[s] + v[e] > m)e--;
else {
result++;
e--;
}
}
cout << result;
}
반응형
'백준 > 증가수열 & 투포인터' 카테고리의 다른 글
[백준 2230번 / C++] 수 고르기 (0) | 2022.02.16 |
---|---|
[백준 2003번 / C++ / 투포인터] 수들의 합2 (0) | 2022.02.16 |
[백준 1911번 / C++] 흙길 보수하기 (0) | 2022.02.09 |
[백준 2170번 / C++] 선 긋기 (0) | 2022.02.09 |
[백준 2670번 / C++ ] 연속부분최대곱 (0) | 2022.02.08 |
댓글