-
[백준/BOJ] 3273번 두 수의 합 (C++)알고리즘 문제풀이/백준 2021. 1. 7. 23:12
정렬 + 투포인터 유형의 문제
수열을 입력받아 정렬한 후, 두개의 포인터를 각각 인덱스 0번과 n - 1번에 가리키게 한 후 다음과 같이 분기를 둡니다.
1. 둘의 합을 x와 비교하여 같으면 head와 tail 모두 1씩 증가 후, answer 1 증가
2. 둘의 합이 x보다 크면 tail 1 감소
3. 둘의 합이 x보다 작으면 head를 1 증가
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(void) { ios_base::sync_with_stdio(false); cin.tie(0); int n, x, answer = 0; cin >> n; vector<int> v(n); for(int i = 0; i < n; i++) { cin >> v[i]; } cin >> x; sort(v.begin(), v.end()); int head = 0, tail = n - 1; while(head < tail) { int sum = v[head] + v[tail]; if(sum == x) { head++; tail--; answer++; } else if(sum > x) { tail--; } else { head++; } } cout<<answer; }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 4949번 균형잡힌 세상 (C++) (0) 2021.01.08 [백준/BOJ] 10773번 제로 (C++) (0) 2021.01.07 [백준/BOJ] 14225번 부분수열의 합 (C++) (0) 2021.01.05 [백준/BOJ] 1213번 팰린드롬 만들기 (C++) (0) 2021.01.04 [백준/BOJ] 2003번 수 들의 합 2 (C++) (0) 2021.01.04