BOJ::2470 두 용액


입력받은 데이터들을 정렬한 뒤,

제일 작은값과 제일 큰값을 먼저 더해 베이스로 만들어 두고

조건에 따라 s++ 혹은 e--를 하여 비교하며 결과를 찾았다.


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
#include <stdio.h>
#include <algorithm>
using namespace std;
#define INF 987987654321
 
long long a[100000];
 
int main() {
    int n;
    scanf("%d"&n);
    for (int i = 0; i < n; i++) {
        scanf("%lld"&a[i]);
    }
 
    sort(a, a + n);
 
    int s = 0;
    int e = n - 1;
    long long res = INF;
    int i=s, j=e;
    
    while (s < e) {
        long long sum = a[s] + a[e];
        if (res > abs(sum)) {
            res = abs(sum);
            i = s;
            j = e;
        }
 
        if (abs(a[s] + a[e]) > abs(a[s + 1+ a[e])) {
            s++;
        }
        else if (abs(a[s] + a[e]) > abs(a[s] + a[e - 1])) {
            e--;
        }
        else {
            e--;
        }
    }
 
    printf("%lld %lld\n", a[i], a[j]);
}
cs


'BOJ::문제풀이' 카테고리의 다른 글

10942 팰린드롬?  (2) 2018.02.05
11723 집합  (0) 2018.02.03
14891 톱니바퀴  (0) 2018.01.28
14503 로봇 청소기  (0) 2018.01.28
14890 경사로  (0) 2018.01.28

+ Recent posts