[투포인터] 백준 3273 두 수의 합
2021. 6. 24. 14:17ㆍ알고리즘 문제분석
https://www.acmicpc.net/problem/3273
수행시간 : 15분 / 난이도 : 실버 3
저번 포스팅에서 설명한 투포인터 알고리즘을 그대로 이용하면 쉽게 풀 수 있는 문제였다.
max, min 값을 벡터의 인덱스로 접근하게 설정해주기!
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int ans = 0;
void sol(vector<int> a, int x, int n);
void input() {
int n, x;
vector<int> v;
cin >> n;
v.resize(n);
for (int i = 0;i < n;++i) {
cin >> v[i];
}
cin >> x;
sort(v.begin(), v.end());
sol(v, x, n);
}
void sol(vector<int> a, int x, int n) {
int min_val = 0;
int max_val = a.size() - 1;
while (1) {
int sum = 0;
if (min_val >= max_val) {
break;
}
sum = a[min_val] + a[max_val];
if (sum == x) {
ans++;
min_val++;
max_val--;
}
else if (sum > x) {
max_val--;
}
else {
min_val++;
}
}
}
int main() {
input();
cout << ans;
}
'알고리즘 문제분석' 카테고리의 다른 글
[BFS] 프로그래머스 "카카오프렌즈 컬러링북" (0) | 2021.06.26 |
---|---|
[백트래킹] 백준 1987 알파벳 (0) | 2021.06.24 |
[백트래킹] 백준 18290 NM과 K(1) (0) | 2021.06.24 |
[BFS] 백준 16928 뱀과 사다리 게임 (0) | 2021.06.24 |
[구현&시뮬레이션] 백준 15686 치킨배달 (0) | 2021.06.24 |