반응형

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

+ Recent posts