본문 바로가기

알고리즘 관련/BOJ

2467 용액

문제의 입력 조건에 오름차 순으로 입력되므로, 범위를 줄여가면서 탐색할 수 있다.

또한 N이 10^5이기 때문에 완전탐색을 사용하면 시간초과가 난다.

합이 0에 가장 가까운 두 개의 수를 찾는 문제이기 때문에 합이 음수라면, 왼쪽의 범위를 축소하고 합이 양수라면 오른쪽의 범위를 축소하면서 인덱스를 저장한다.

 

더보기

정답코드

#include <iostream>
using namespace std;
#define MAX_SIZE 100000
int N;
int arr[MAX_SIZE];
int main()
{
	scanf("%d", &N);
	for (int i = 0; i < N; i++)
		scanf("%d", &arr[i]);
	int start = 0, end = N - 1;
	long long sum = arr[start] + arr[end];
	long long minimum = abs(sum) + 1;
	int idx1, idx2;
	while (start < end) {
		sum = arr[start] + arr[end];
		if (abs(sum) < minimum) {
			minimum = abs(sum);
			idx1 = start;
			idx2 = end;
		}
		if (sum < 0)
			start++;
		else
			end--;
	}
	printf("%d %d\n", arr[idx1], arr[idx2]);
	return 0;
}

'알고리즘 관련 > BOJ' 카테고리의 다른 글

14891 톱니바퀴  (0) 2021.03.08
1806 부분합  (0) 2021.01.28
17404 RGB거리 2  (0) 2021.01.22
12852 1로 만들기 2  (0) 2021.01.13
2225 합분해  (0) 2021.01.11