본문 바로가기

Algorithm/BAEKJOON

[BOJ] 2467번 용액 (C++)

728x90
반응형

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

 

2467번: 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -

www.acmicpc.net

 

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

int main() {
	int n;
	cin >> n;
	
	vector<int> v;
	int t;
	for(int i = 0; i < n; i++) {
		cin >> t;
		v.push_back(t);
	}
	
	long long min = 987654321;
	long long a = 0;
	long long b = 0;
	int l = 0;
	int r = v.size() - 1;
	while(l < r){
		int sum = v[l] + v[r];
		if(abs(sum) < min){
			min = abs(sum);
			a = v[l];
			b = v[r];
		}
		if(sum <= 0) l++;
		else r--;
	}
	cout << a << " " << b << endl;
	return 0;
}

 

이미 정렬된 배열이 들어오므로

1. 두 포인터 l과 r에 첫 요소와 마지막 요소의 인덱스값을 넣는다.

2. l과 r의 합이 양수일 경우에는 r이 더 작아져야 하므로 r을 하나 앞으로 옮겨준다.

   l과 r의 합이 음수일 경우네는 l이 더 커져야 하므로 l을 하나 뒤로 옮겨준다.

3. 이 때, l과 r의 합의 절댓값이 이전에 기억해둔 l과 r의 합의 절댓값보다 작다면 이 값과 l, r 값을 기억해둔다.

728x90
반응형