용액

Wonseok Lee·2022년 3월 5일
0

Beakjoon Online Judge

목록 보기
102/117
post-thumbnail

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

노말한 투 포인터 문제로, 서로 반대 방향에서 출발하는 투 포인터 알고리즘을 사용해주자.

#include <cstdio>
#include <limits>
#include <algorithm>

using namespace std;

inline int abs(const int x)
{
	return x >= 0 ? x : -x;
}

const int kMaxN = 100000;

int N;
int LIQUID[kMaxN];

void Solve()
{
	int answer_thickness = numeric_limits<int>::max();
	int answer_lo;
	int answer_hi;

	int lo = 0;
	int hi = N - 1;
	while (lo < hi)
	{
		int sum = LIQUID[lo] + LIQUID[hi];
		if (abs(sum) < answer_thickness)
		{
			answer_thickness = abs(sum);
			answer_lo = lo;
			answer_hi = hi;
		}

		if (sum == 0)
		{
			break;
		}
		else if (sum < 0)
		{
			++lo;
		}
		else
		{
			--hi;
		}
	}

	printf("%d %d\n", LIQUID[answer_lo], LIQUID[answer_hi]);
}


int main(void)
{
	// Read Input
	scanf(" %d", &N);
	for (int it = 0; it < N; ++it)
	{
		scanf(" %d", &LIQUID[it]);
	}

	// Solve
	Solve();

	return 0;
}

profile
Pseudo-worker

0개의 댓글