while(1) 작심삼일();

[백준 2470번] 두 용액 본문

CS/baekjoon

[백준 2470번] 두 용액

hanjongho 2021. 4. 19. 02:08

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

 

2470번: 두 용액

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

www.acmicpc.net

풀이) 

투포인터 알고리즘을 이용하여 좌우합의 절댓값비교를 하며 조건에 맞는 경우 저장해두고, 범위를 좁혀가면 된다. 이미 0을 만들어버리게 되면 바로 break문을 통해 빠져나오게 구현하였다.  

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

int N, sum = 0, ans = 2e9 + 1, ans_left, ans_right;
int arr[100001];

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin >> N;
	for (int i = 0; i < N; i++)
		cin >> arr[i];

	sort(arr, arr + N);
	int left = 0, right = N - 1;
	while (left < right)
	{
		sum = arr[left] + arr[right];
		if (abs(sum) < ans)
		{
			ans = abs(sum);
			ans_left = left;
			ans_right = right;
		}
		if (sum == 0)
			break ;
		if (sum > 0)
			right--;
		else if (sum < 0)
			left++;
	}
	
	cout << arr[ans_left] << " " << arr[ans_right] << "\n";
	return (0);
}

 

 

제 코드는 절대 완벽하지 않습니다

더 좋은 풀이방법 혹은 코드에 관한 질문이 있으시면 언제든 댓글주세요!

'CS > baekjoon' 카테고리의 다른 글

[백준 2559번] 수열  (0) 2021.04.19
[백준 1874번] 스택 수열  (0) 2021.04.19
[백준 7569번] 토마토  (0) 2021.04.17
[백준 1613번] 역사  (0) 2021.04.16
[백준 1516번] 게임 개발  (0) 2021.04.14
Comments