C#/프로그래머스 코딩 문제 풀이

[프로그래머스 C#] Lv.0 중앙값 구하기, 최빈값 구하기

ForMan_ 2024. 1. 5. 18:21

1. 문제: 중앙값 구하기

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

2. 제한사항

● array의 길이는 홀수입니다.
● 0 < array의 길이 < 100
● -1,000 < array의 원소 < 1,000

3. 입출력 예시

array result
[1,2,7,10,11] 7
[9,-1,0] 0

4. 나의 풀이

<1: for문과 if문을 활용>

public static int solution(int[] array)
    {
        int answer = 0;

        //이중for문과 if문을 이용하여 array배열의 원소를 낮은 수부터 크기 순으로 나열.
        for (int i = 0; i < array.Length; i++)
        {
            for (int j = 0; j < array.Length; j++)
            {
                if (array[i] > array[j])
                {
                    int temp = array[j];
                    array[j] = array[i];
                    array[i] = temp;
                }
            }
        }

        //리턴할 때 배열의 중앙에 위치한 값만 출력.
        return answer = array[array.Length / 2];
    }


<2: Array.Sort 매서드 활용>

public static int solution(int[] array)
    {
        int answer = 0;

        //Sort()매서드: 배열 클래스에 속한 매서드. 괄호 속 배열의 원소를 오름차순으로 나열.
        Array.Sort(array);

        return answer = array[array.Length / 2];
    }

 


1. 문제: 최빈값 구하기

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

2. 제한사항

● 0 < array의 길이 < 100
● 0 ≤ array의 원소 < 1000

3. 입출력 예시

array result
[1,2,3,3,3,4] 3
[1,1,2,2] -1
[1] 1

4. 나의 풀이

public static int solution(int[] array)
    {
        int answer = 0;
        int maxArr = 0;

        //array배열에서 가장 큰 수를 maxArr에 대입.
        for (int i = 0; i < array.Length; i++)
        {
            if (array[i] > maxArr) maxArr = array[i];
        }

        int[] cnt = new int[maxArr + 1];
        int max = 0;
        int num = 0;

        //array배열 원소 중 같은 수의 빈도 수를 체크하고 분류.
        for (int i = 0; i < array.Length; i++)
        {
            cnt[array[i]]++;
        }

        //cnt배열에서 가장 큰 수를 max에 대입. 그 때의 방번호가 answer.
        for (int i = 0; i < cnt.Length; i++)
        {
            if (cnt[i] > max)
            {
                max = cnt[i];
                answer = i;
            }
        }

        //cnt배열 원소 중 max와 같은 수가 나오면 num++.
        for (int i = 0; i < cnt.Length; i++)
        {
            if (cnt[i] == max) num++;
        }

        //만약 num값이 1보다 크면 cnt배열에서 빈도 수가 같은 원소가 2이상이라는 것. 그러면 -1을 리턴.
        if (num > 1) answer = -1;

        return answer;
    }