알고리즘 풀이

[C#] 백준 2467번 문제풀이

bimtaeur30 2026. 2. 26. 14:12

문제번호: 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