๋ฐฑ์ค€/Gold

[BOJ] 2470 : ๋‘ ์šฉ์•ก

Jaeguk 2022. 2. 2. 14:51
๋ฌธ์ œ ๋งํฌ

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<intint>int>vector<pair<pair<intint>int>>, greater<pair<pair<intint>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

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ํ’€์—ˆ๋‹ค๊ณ  ํ•ด์„œ ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ํ•˜๋‹ค๊ฐ€ ์‹œ๊ฐ„์„ ๋งŽ์ด ์žก์•„๋จน์—ˆ๋‹ค.

728x90