본문 바로가기
코딩테스트/프로그래머스 Lv.0

[문제] 중앙값 구하기

by moca7 2024. 10. 9.

 

 

ㅁ 문제 

 

중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다.

예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다.

정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

 

 

 

ㅁ 제한 사항

 

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

 

ㅁ 입출력 예

 

 

 

 

 

ㅁ 풀이

 

class Solution {
    public int solution(int[] array) {
        
        int num = 0;

        while(true){
            
            int escape = 0;
            
            for(int i=0; i<array.length; i++){
                
                if(i != array.length-1){
                    if(array[i] > array[i+1]){
                        num = array[i];
                        array[i] = array[i+1];
                        array[i+1] = num;
                        escape++;
                    }
                }
            }
            
            if(escape == 0){
                break;
            }
        }
        
        return array[array.length/2];
        
    }
}

 

 

 

- 정렬되지 않은 상태의 정수 배열이 매개변수로 온다. 이걸 오름차순으로 정렬하고, 중앙값을 구해야 한다.

- array 배열의 길이는 항상 홀수다.

 

- 배열의 길이를 모르기 때문에 반복문을 써야겠다고 생각.

- 정처기 공부할 때 이런 정렬을 몇개 봤던게 생각나서 양 옆을 비교해서 크면 오른쪽으로 가도록 정렬했다.

- i가 배열의 마지막 인덱스일땐 스왑이 안되게끔 했다.

 

- 그런데 한번 정렬로 완전하게 정렬되지 않아서 무한루프시켰다.

- 탈출은 int형 변수 하나 주고 스왑할 때 증가시키도록 하고, 증가하지 않았다면 정렬이 끝난 것이므로 탈출하도록 했다.