White Whale Studio

[알고리즘] 최소값 구하기 / C# 풀이 본문

IT Engineering/코딩놀이

[알고리즘] 최소값 구하기 / C# 풀이

glorymind 2015. 4. 24. 15:16
반응형

[코딩 도장 문제입니다.] 난이도 평균 2

1차원의 점들이 주어졌을 때, 그 중 가장 거리가 짧은 것의 쌍을 출력하는 함수를 작성하시오. (단 점들의 배열은 모두 정렬되어있다고 가정한다.)

예를들어 S={1, 3, 4, 8, 13, 17, 20} 이 주어졌다면, 결과값은 (3, 4)가 될 것이다.

최소값 구하기 문제입니다.

어떻게하면 더 줄일수있을것 같으면서도.. 심플한게 베스트 아닌가하는 억지를 부려가며

짜보았습니다.

Abs 함수는 절대값을 반환하는 함수로 Math.Abs() 라는 함수가 자체적으로 있기는 합니다만..

어디선가 기본 제공함수보다 직접짜면 성능면에서 더 빠르다는 이야기를 들어 코드에 포함했습니다.

(그래봤자 연습문제 풀이지만;;;)

방법은 간단합니다. 반복문을 돌면서 각 수별로 차이값을 계산하고 가장 최소값과 최소값을 만드는 숫자쌍을 저장하여 마지막에 남은 애들이 최소값이 되는 방식입니다.  끝~

--------------------


 public static class SearchMinDistance

    {

        static int[] arr = new int[7] {1, 3, 4, 8, 13, 17, 20 }; // 기본 데이터


        static int[] minItem = new int[2] { -1, -1 }; // 결과값 저장 배열

        static int tempMin = 9999; // 거리차 저장 변수

                

        public static void SearchMinDis()

        {

            for (int i = 0; i < arr.Length; i++)

            {

                for (int j = 0; j < arr.Length; j++)

                {

                    if (i != j)

                    {

                        if (tempMin > Abs(arr[i], arr[j])) // 두 수의 차가 기존의 최소값보다 작으면 저장

                        {

                            tempMin = Abs(arr[i], arr[j]);

                            minItem[0] = arr[i];

                            minItem[1] = arr[j];

                            Console.WriteLine("{0}, {1} : R = {2}", minItem[0], minItem[1], Abs(minItem[0], minItem[1]));

                        }

                    }

                }

            }


            Console.WriteLine("{0}, {1} : R = {2}", minItem[0], minItem[1], Abs(minItem[0], minItem[1]));

        }

        

        public static int Abs(int i, int j) // 절대값 반환 함수입니다.

        {

            int results = i - j;

            return results > 0 ? results : results * -1;

        }

    }

반응형
Comments