using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//[?] 근삿값 알고리즘: 원본 데이터 중에서 대상 데이터와 가장 가까운 값
//차잇값의 절댓값의 최솟값

namespace Project2
{
    class Class1
    {
        static void Main(string[] args)
        {
            //절댓값 구하기 로컬 함수
            int Abs(int number) => number<0 ? - number:number;

            //[0]Initialize
            int min = int.MaxValue; //차잇값의 절댓값의 최솟값이 담길 그릇
            

            //[1]Input
            int[] numbers = {10, 20, 30, 27, 17 };
            int target = 25; //타겟과 가까운 값
            int near = default; //근삿값

            //[2]process
            for(int i=0; i<numbers.Length; i++)
            {
                int abs = Abs(numbers[i] - target);
                if (abs < min )
                {
                    min = abs; //min 최솟값
                    near = numbers[i]; //차잇값의 절댓값의 최솟값일 때의 값
                }
            }

            //[3]Output
            var minimum = numbers.Min(m => Abs(m - target)); //차잇값의 최솟값
            var closest = numbers.First(n => Abs(n - target) == minimum);
            Console.WriteLine($"{target}와 가장 가까운 값(식):{closest}(차이:{minimum}) ");
            Console.WriteLine($"{target}와 가장 가까운 값(식): {near}(차이:{min})");

        }
        
    }
}