8월 2주차 과제 : 문제 3_중앙값 구하기

2023. 8. 13. 11:36Algorithm ( p & swlug )/Programmers

8월 2주차 과제는 다음과 같다.

1.피자나눠먹기(2)
2.중복된 숫자개수
3.중앙값 구하기

 

 

마지막 문제이다.

 

문제 설명

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

입출력 예

[1, 1, 2, 3, 4, 5] 1 2
[0, 2, 3, 4] 1 0

 

 

중앙값을 구하기위해서는 먼저 오름차순으로 정리해야한다.

 

배열 공부할때 오름차순으로 정리하는 걸 배웠었는데 처음에는   for (j = 0; j < array_len- i-1 ; j++) 이 두번째 줄이 잘 생각이 ,, 분명 for문으로 반복을 중첩으로 했던 것은 기억이 나는데 형태가 잘 기억이 안났는데, 다시 한번 공부할 수 있는 기회가 되었고, if 문을 활용해서 오름차순으로 정리했다.

 

그리고 중앙값을 구하는데 나는 k를 변수로 두고 길이의 몫을 대입해서 answer가 array[k]의 값이 저장되도록했다.

(원래 길이가 3인 배열에서 중앙값을 구할 때 2번째 값이 중앙값일테니 몫이면 3 / 2 해서 1이라 +1을 해줘야할 것 같은데 배열은 0부터 시작되니까 그냥 냅둬도 된다.)

 

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

// array_len은 배열 array의 길이입니다.
int solution(int array[], size_t array_len) {
    int answer = 0;
    int i, k, j , temp ;
    
    for (i = 0; i < array_len ; i++) {
         for (j = 0; j < array_len- i-1 ; j++){
        if (array[j] > array[j + 1]) {
            temp = array[j];
            array[j] = array[j + 1];
            array[j + 1] = temp; // 1. 오름차순으로 정리
        }
      }
    }
    
    k = array_len / 2  ;
    answer = array[k]; // 중앙값 구하기
    
    return answer;
}


int main() 
 {
 solution((int[]){1,2,7,10,11},5);

    return 0;
}

정답입니다.!