문제번호: 2467
문제명: 용액
문제링크: https://www.acmicpc.net/problem/2467
문제내용과 예제 입/출력은 위 문제 링크에서 확인해 주시기 바랍니다
오늘은 용액 문제를 풀었습니다. 이분탐색을 이용하는 문제였습니다. 해당 문제는 완전탐색으로 갈 시 100억이 넘은 연산이 필요했기에 무조건 이분탐색을 이용해야 했습니다. 저는 왼쪽, 오른쪽 인덱스를 가르키는 두 정수를 이용하여 0에 가까운 두 수를 찾아내기 위해 sum을 양수인지 음수인지 비교하고 결과에 따라 left++ 또는 right--을 해주는 방식으로 0과 가까운 계산결과를 찾아내었습니다.
다음은 정답코드입니다.
public static void Main()
{
using StreamReader sr = new StreamReader(Console.OpenStandardInput());
using StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
int N = int.Parse(sr.ReadLine());
int[] numbers = Array.ConvertAll(sr.ReadLine().Split(), int.Parse);
Array.Sort(numbers);
int left = 0;
int right = N - 1;
int bestSum = int.MaxValue;
int numA = 0;
int numB = 0;
while (left < right)
{
int sum = numbers[left] + numbers[right];
if (Math.Abs(sum) < bestSum)
{
bestSum = Math.Abs(sum);
numA = numbers[left];
numB = numbers[right];
}
if (sum < 0)
{
left++;
}
else
{
right--;
}
}
sw.WriteLine($"{numA} {numB}");
sr.Close();
sw.Close();
}
'알고리즘 풀이' 카테고리의 다른 글
| [C#] 백준 1991번 문제풀이 (0) | 2026.02.28 |
|---|---|
| [C#] 백준 2470번 문제풀이 (0) | 2026.02.27 |
| [C#] 백준 2606번 문제풀이 (0) | 2026.02.26 |
| [C#] 백준 18939번 문제풀이 (0) | 2026.02.23 |
| [C#] 백준 2217번 문제풀이 (0) | 2026.02.22 |