1 minute read

중앙값 구하기

문제 설명

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


제한사항

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

입출력 예

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

입출력 예 설명

입출력 예 #1

  • 본문과 동일합니다.

입출력 예 #2

  • 9, -1, 0을 오름차순 정렬하면 -1, 0, 9이고 가장 중앙에 위치하는 값은 0입니다.

나의 풀이 코드

import java.util.Arrays; //sort 메서드 사용


class Solution {
    public int solution(int[] array) {
        int answer = 0;
        
        try{
            //예외처리
            if ((array.length%2)==0){ //짝수일때 throw
                throw new IllegalArgumentException("입력받은 array의 길이가 홀수이어야 합니다.");
            }
            if (0>array.length || array.length>100){ //범위를 벗어날때
                throw new IllegalArgumentException("입력받은 array길이가 범위에서 벗어났습니다.");       
            }
            for (int num : array) {
                if (-1000>=num || num>=1000){ //범위를 벗어난 array의 원소가 있을때
                    throw new IllegalArgumentException("범위를 벗어난 array의 원소가 있습니다.");     
                }
            }
            // array 오름차순 정렬하기
            Arrays.sort(array);
            // 중앙값 구하기
            int halflength = (array.length/2) ;
            answer = array[halflength];
            
        } catch (IllegalArgumentException e) {
            System.out.println("Exception: " + e.getMessage());
            return 0;
        }
        
        
        return answer;
    }
}

배운점

import java.util.Arrays;

class Solution {
    public int solution(int[] array) {
        Arrays.sort(array);
        return array[array.length >> 1];
    }
}

위 코드는 남이 푼 코드인데 오른쪽 시프트를 사용해서 각 비트를 오른쪽으로 이동시킴으로써 숫자를 2의 거듭제곱 배만큼 감소시켰다. 산술연산의 나눗셈 대신 사용할수 있다.

예외처리를 한것과 안한것의 코드길이가 많이 차이난다. 제한사항이 많고 반복문을 사용할수록 더 길어질것이다. 지금은 공부목적으로 예외처리를 하지만 코딩테스트를 볼때는 사용할지 말지 고민된다.

Leave a comment