어흥
[백준 3273] 두 수의 합 (C++) 본문
728x90
반응형
문제 링크: www.acmicpc.net/problem/3273
1. 주의할 점
- 딱히 없다... 배열을 이용하여 A + B = X를 만족하는 B(=X-A)를 찾아도 된다
2. 구현
- 정렬을 통해 수를 오름차순 정렬시킨다
- 양끝에서 시작하는 투포인터로 접근한다
- While문이 끝나는 경우로는 l이 r과 같거나 크면! (같다고만 하면 런타임 에러 발생할 수도 있다. 아래에 예시가 존재!)
더보기
2
1 2
3
답: 1
- 두 수의 합이 Target과 같다면 왼쪽++, 오른쪽--를 수행
- 두 수의 합이 Target보다 작다면 수가 커져야 하므로 왼쪽++
- 두 수의 합이 Target보다 크가면 수가 작아져야하므로 오른쪽--
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int num, a, target;
cin >> num;
vector<int> v;
for (int i = 0; i < num; i++) {
cin >> a;
v.push_back(a);
}
cin >> target;
sort(v.begin(), v.end());
int l = 0, r = num-1, cnt = 0;
while (1) {
if (l >= r)
break;
int sum = v[l] + v[r];
if (sum == target) {
cnt++;
l++;
r--;
}
else if (sum < target)
l++;
else
r--;
}
cout << cnt;
return 0;
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 1092] 배 (C++) (4) | 2020.10.26 |
---|---|
[백준 10216] Count Circle Groups (C++) (0) | 2020.10.20 |
[백준 8911] 거북이 (C++) (0) | 2020.10.12 |
[백준 1965] 상자넣기 (C++) (0) | 2020.10.07 |
[백준 1800] 인터넷 설치 (C++) (0) | 2020.10.04 |
Comments