반응형
https://www.acmicpc.net/problem/2470
2470번: 두 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00
www.acmicpc.net
용액의 특성 값을 정렬해준 뒤, 배열의 시작과 끝을 가리키는 두 개의 인덱스를 둡니다.
두 인덱스는 두 용액의 특성 합이 0에 가까워지는 방향으로 움직이게 됩니다.
두 인덱스 용액의 특성 합이 0보다 크다면, 합을 줄여줘야하므로 끝 인덱스를 하나 내려줍니다.
두 인덱스 용액의 특성 합이 0보다 크지 않다면, 합을 올려줘야하므로 시작 인덱스를 하나 올려줍니다.
이 과정 속에서, 두 용액의 특성합이 최소가 되는 시점을 기억해줍니다.
#include <iostream>
#include <algorithm>
#include <cmath>
#define INF 2147483647
using namespace std;
int arr[100001], n, diff = INF, al, ar;
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
sort(arr, arr + n);
int l = 0, r = n - 1;
while (l < r) {
int val = arr[l] + arr[r];
if (diff > abs(val)) {
diff = abs(val);
al = l, ar = r;
}
if (val > 0) r--;
else l++;
}
printf("%d %d", arr[al], arr[ar]);
}
반응형
'Algorithm' 카테고리의 다른 글
백준 1080 : 행렬 (0) | 2021.11.16 |
---|---|
백준 4811 : 알약 (0) | 2021.11.16 |
백준 2096 : 내려가기 (0) | 2021.11.16 |
백준 4803 : 트리 (0) | 2021.11.16 |
백준 2887 : 행성 터널 (0) | 2021.11.16 |