문제 링크입니다: https://www.acmicpc.net/problem/3273
배열을 오름차순으로 정렬한 뒤 이분 탐색을 통해 두 수의 쌍을 구해주면 되는 문제였습니다.
'쌍'을 구해야하기 때문에 구한 값을 반으로 나눈 뒤 출력해주는 것이 핵심이였습니다.
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX = 100000;
int arr[MAX];
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N, X;
cin >> N;
for (int i = 0; i < N; i++)
cin >> arr[i];
cin >> X;
sort(arr, arr + N);
int result = 0;
for (int i = 0; i < N; i++)
{
int low = 0, high = N - 1;
while (low <= high)
{
int mid = (low + high) / 2;
if (arr[mid] == X - arr[i])
{
result++;
break;
}
else if (arr[mid] < X - arr[i])
low = mid + 1;
else
high = mid - 1;
}
}
//이 부분이 핵심
cout << result / 2 << "\n";
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 11778번 피보나치 수와 최대공약수 (0) | 2019.02.12 |
---|---|
백준 11997번 Load Balancing(Silver) (2) | 2019.02.12 |
백준 16723번 원영이는 ZOAC와 영원하고 싶다 (2) | 2019.02.09 |
백준 6523번 조세퍼스 한 번 더! (0) | 2019.02.08 |
백준 1168번 조세퍼스 문제 2 (2) | 2019.02.08 |