열심히 코딩 하숭!

[알고리즘] 2470 두 용액 | baekjoon 문제 풀이 본문

코딩테스트/알고리즘

[알고리즘] 2470 두 용액 | baekjoon 문제 풀이

채숭이 2023. 4. 7. 09:05

https://www.acmicpc.net/problem/2470

 

2470번: 두 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00

www.acmicpc.net

 

 

#include <iostream>
#include <algorithm>
using namespace std;

pair<int, int> arr[100000]; 

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	
	int N; cin >> N;
	int num;

	for (int i = 0; i < N; i++) {
		cin >> num;
		if (num < 0) arr[i] = { (-1) * num, -1 };
		else arr[i] = { num, 1 };
	}

	sort(arr, arr + N);

	int a, b, min, value;
	a = 0;
	b = 1;
	min = abs(arr[a].first * arr[a].second + arr[b].first * arr[b].second);

	for (int i = 1; i < N - 1; i++) {
		value = abs(arr[i].first * arr[i].second + arr[i + 1].first * arr[i + 1].second);
		if (min > value) {
			a = i;
			b = i + 1;
			min = value;
		}
	}

	int resultA = arr[a].first * arr[a].second;
	int resultB = arr[b].first * arr[b].second;

	if (resultA < resultB) cout << resultA << " " << resultB;
	else cout << resultB << " " << resultA;
}