[BOJ] 2470 : ๋ ์ฉ์ก
๋ฌธ์ ๋งํฌ
2470๋ฒ: ๋ ์ฉ์ก (acmicpc.net)
2470๋ฒ: ๋ ์ฉ์ก
์ฒซ์งธ ์ค์๋ ์ ์ฒด ์ฉ์ก์ ์ N์ด ์ ๋ ฅ๋๋ค. N์ 2 ์ด์ 100,000 ์ดํ์ด๋ค. ๋์งธ ์ค์๋ ์ฉ์ก์ ํน์ฑ๊ฐ์ ๋ํ๋ด๋ N๊ฐ์ ์ ์๊ฐ ๋น์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. ์ด ์๋ค์ ๋ชจ๋ -1,000,000,000 ์ด์ 1,000,00
www.acmicpc.net
ํ์ด
๋ ์ฉ์ก์ ํน์ฑ๊ฐ์ ํฉ์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฉ์ก์ ๋ง๋๋ ๋ฌธ์ .
๋ธ๋ฃจํธํฌ์ค๋ก ํด๊ฒฐํ๋ ค ํ๋ค๋ฉด O(N^2) ์ด๊ธฐ๋๋ฌธ์ ๋น์ฐํ ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค.
ํฌํฌ์ธํธ ๊ธฐ๋ฒ์ ์ฌ์ฉํด์ผํ๋๋ฐ ๋ง ๊ทธ๋๋ก ๊ทธ๋ฅ ๋ ๊ฐ์ ์ ์ ์ฐ๋ ๋ฐฉ์์ด๋ค.
๋จผ์ ์ฉ์ก์ ํน์ฑ๊ฐ๋ค์ด ๋ด๊ธด ๋ฒกํฐ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
Left๋ฅผ 0 Right๋ฅผ N-1๋ก ์ก๊ณ (Left์ Right๊ฐ ๋ ์ ์ด ๋๋ค)
๋ฒกํฐ์ Left ์ธ๋ฑ์ค์ Right์ธ๋ฑ์ค์ ์๋ ๊ฐ์ ํฉ์ ๊ตฌํ๋ค.
๋ง์ฝ ํฉ์ด ์์๋ผ๋ฉด ํฉ์ ์ค์ฌ์ผ ํ๊ธฐ ๋๋ฌธ์ Right ๊ฐ์ ์ค์ธ๋ค.
๋ฐ๋๋ก ํฉ์ด ์์๋ผ๋ฉด ํฉ์ ๋๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์ Left๊ฐ์ ๋๋ฆฐ๋ค.
์ด๋ ๊ฒ ํด์ ์ต์์ธ ์ง์ ์ ์ฐพ์ผ๋ฉด ๋.
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
|
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string.h>
#include <string>
#include <stack>
#include <vector>
#include <queue>
#include <climits>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef priority_queue <pair<pair<int, int>, int>, vector<pair<pair<int, int>, int>>, greater<pair<pair<int, int>, int>>> Priority_queue;
const int INF = INT_MAX;
int N;
ll Min = LLONG_MAX;
vector<int> v;
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
for (int i = 0; i < N; i++) {
int num;
cin >> num;
v.push_back(num);
}
sort(v.begin(), v.end());
int L = 0;
int R = v.size() - 1;
int ans1, ans2;
while (L < R) {
if (abs(v[L] + v[R]) < Min) {
ans1 = v[L];
ans2 = v[R];
Min = abs(v[L] + v[R]);
}
if (v[L] + v[R] > 0) {
R--;
}
else {
L++;
}
}
cout << ans1 << " " << ans2 << "\n";
return 0;
}
|
cs |
๋ง์ ์ฌ๋๋ค์ด ์ด๋ถํ์์ผ๋ก ํ์๋ค๊ณ ํด์ ์ด๋ถํ์์ผ๋ก ํ๋ค๊ฐ ์๊ฐ์ ๋ง์ด ์ก์๋จน์๋ค.