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

 

2470번: 두 용액

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

www.acmicpc.net

 

일단 두용액을 합했을 경우 최대 1999999999값이 될수 있으므로 liquid를 2000000000로 값 설정.

1. 배열을 정렬 후, 최소 값을 가리키는 min, 최대 값을 가리키는 max 인덱스를 생성.

2. min과 max의 차가 0보다 클 때, 즉 인덱스차가 1이하가 되면 서로 교차하니 반복문 종료.

3. liquid가 최소,최대를 더한 값의 절댓값 보다 크다면 liquid를 절대값 sum으로 변경.

4. 그리고 min max는 계속 돌아가야하니 정답인덱스를 받을 left right 변수에 저장.

5. sum 값이 0보다 크면 양수가 크니 max 값을 줄이고, 0보다 작으면 음수가 크니 min을 올려줌

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Baekjoon.Gold
{
    class _2470
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int[] arr = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            Array.Sort(arr);

            //최소 최대 인덱스
            int min = 0;
            int max = n - 1;
            int liquid = 2000000000;

            //왼쪽 오른쪽 답
            int left = 0;
            int right = n - 1;

            while(max-min > 0)
            {
                int sum = arr[max] + arr[min];
                if (liquid > Math.Abs(sum))
                {
                    liquid = Math.Abs(sum);
                    left = min;
                    right = max;
                }

                if (sum > 0)
                    max--;
                else
                    min++;
            }

            Console.WriteLine($"{arr[left]} {arr[right]}");
        }
    }
}

'문제 풀이 > C#' 카테고리의 다른 글

[24445] - 알고리즘 수업 - 너비 우선 탐색 2  (1) 2022.09.24
[24444] - 알고리즘 수업 - 너비 우선 탐색 1  (0) 2022.09.23
[23247] - Ten  (0) 2022.09.22
[2156] - 포도주 시식  (1) 2022.09.20
[12904] - A와 B  (0) 2022.09.19

+ Recent posts