Rylah's Study & Daily Life
[BOJ/C++] 3273. 두 수의 합 본문
https://www.acmicpc.net/problem/3273
3273번: 두 수의 합
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는
www.acmicpc.net
두 수의 합 다국어
한국어
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 | 128 MB | 17308 | 6213 | 4792 | 36.692% |
문제
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 (ai, aj)쌍의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 수열의 크기 n이 주어진다. 다음 줄에는 수열에 포함되는 수가 주어진다. 셋째 줄에는 x가 주어진다. (1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000)
출력
문제의 조건을 만족하는 쌍의 개수를 출력한다.
예제 입력 1 복사
9
5 12 7 10 9 1 2 3 11
13
예제 출력 1 복사
3
출처
Olympiad > Balkan Olympiad in Informatics > Junior Balkan Olympiad in Informatics > JBOI 2008 6번
- 데이터를 추가한 사람: BaaaaaaaaaaarkingDog
- 문제를 번역한 사람: baekjoon
풀이
투포인터를 이용해보자
정렬 이후 투포인터를 이용해서 cnt를 세는 방식
정렬에 nlogn이 들어가서 시간 복잡도는 O(NlogN)
사용한 투포인터는 O(n)이다. 하지만 정렬이 시간복잡도가 더 들어간다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
// BaaarkingDog 실전 알고리즘 학습
// 0x03. Array
// 3273. 두 수의 합
// Write : Rylah
// Date : 2022. 04. 03
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n; // 1 <= n <= 100000
cin >> n;
vector<int> v(n);
for (int i = 0; i < v.size(); i++)
cin >> v[i];
sort(v.begin(), v.end());
int lhsIdx = 0;
int rhsIdx = n - 1;
int target;
cin >> target;
int findCnt = 0;
while (lhsIdx < rhsIdx)
{
if (target == (v[lhsIdx] + v[rhsIdx]))
{
findCnt++;
lhsIdx++;
rhsIdx--;
continue;
}
else if (target > v[lhsIdx] + v[rhsIdx])
{
lhsIdx++;
continue;
}
else if (target < v[lhsIdx] + v[rhsIdx])
{
rhsIdx--;
continue;
}
}
cout << findCnt << "\n";
return 0;
}
|
cs |
'BOJ' 카테고리의 다른 글
[BOJ/C++] 13300. 방 배정 (0) | 2022.04.03 |
---|---|
[BOJ/C++] 10807. 개수 세기 (0) | 2022.04.03 |
[BOJ/C++] 1475. 방 번호 (0) | 2022.04.03 |
[BOJ/C++] 10808. 알파벳 개수 (0) | 2022.04.03 |
[BOJ/C++] 2577. 숫자의 개수 (0) | 2022.04.03 |