article thumbnail image
Published 2021. 10. 8. 09:29

# Find the Median (Sorting)

[문제]

 

[코드]

void quickSort(vector<int>* arr, int start, int end){
    int pivot = (*arr)[start], temp;
    int left = start+1, right = end;
    
    if(left < right)
    {
        while(left <= right)
        {
            while((*arr)[left] <= pivot && left <= end) left++;
            while((*arr)[right] > pivot && right >= start) right--;
            if(left <= right)
            {
                temp = (*arr)[left];
                (*arr)[left] = (*arr)[right];
                (*arr)[right] = temp;
            }
            else
            {
                temp = (*arr)[right];
                (*arr)[right] = pivot;
                (*arr)[start] = temp;
            }  
        }
        quickSort(arr, start, right-1);
        quickSort(arr, right+1, end);
    }
}

int findMedian(vector<int> arr) {
    quickSort(&arr, 0, arr.size()-1);
    return arr[arr.size()/2];
}

 

[코드설명]

요소의 개수가 홀수인 정수 리스트의 중간값을 구하는 문제다.

quick sort로 정수 리스트를 정렬하였다.

요소의 개수가 홀수이므로 중간값은 마지막 인덱스(n-1)를 2로 나눈 인덱스에 위치한다.

 

quick sort는 pivot을 정해서 pivot보다 큰 수와 작은 수를 판별하여 정렬하는 알고리즘이다.

divide and conquer 방식으로, 정렬한 리스트에서 pivot을 기준으로 sub list로 나누어서 또 정렬한다.

 

 

[채점 결과]

 

 

 

 

 

'알고리즘' 카테고리의 다른 글

[HackerRank] Plus Minus  (0) 2021.11.05
[HackerRank] Closest Numbers  (0) 2021.11.05
[HackerRank] Diagonal Difference  (0) 2021.10.08
[HackerRank] A Very Big Sum  (0) 2021.09.29
[HackerRank] Counting Sort 2  (0) 2021.09.29
복사했습니다!