반응형
문제 설명
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 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 |
소스코드
Solution.c
#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, j, temp = 0;
// 버블 정렬 사용
for (i = 0; i < array_len; i++) {
for (j = 0; j < (array_len - 1) - i; j++) {
if (array[j] > array[j + 1]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
return answer = array[array_len/2];
}
풀이
이번 문제는 작게 보면 두 가지 문제를 해결해야 한다. 하나는 배열을 크기 순서대로 정렬하는 것 즉 오름차순으로 정렬하는 것과 그렇게 정리한 배열에서 중앙에 위치한 값을 출력하는 것 이렇게 두 가지이다. 그래서 이번 문제 중 오름차순으로 정렬하는 것은 버블 정렬이라는 것을 사용하였다. 버블 정렬이 무엇이냐 하면, 배열 내에 인접한 두 개의 값을 비교하여 더 큰 숫자를 뒤로 보내 차곡차곡 쌓는 것이다. 예를 들어 배열 5, 3 ,1이 들어있다고 가정할 때, 먼저 앞에 5와 3을 비교하면 앞에 위치한 5가 더 크므로 뒤로 이동시켜 3, 5 ,1 형태를 만들고, 이어서 5와 1을 비교하여 3, 1, 5의 형태를 만든다. 다음 진행으로 3과 1을 비교하여 1,3,5를 만들고 3과 5를 비교했을 때 3이 5보다 작으므로 종료한다. 이런 식으로 정렬을 진행하는 것을 버블 정렬이라고 한다. 다음은 배열의 중앙에 위치한 값을 출력하는 것이다. 이는 배열의 전체 크기를 계산해 주고 이를 2로 나누어 그 위치에 있는 값을 구해주면 끝난다.
한마디
이번 문제는 버블정렬을 모르고 있었으면 해결하기 어려웠을 것이다. 배열에 대한 정렬 여러가지를 다시 한 번 공부해 봐야겠다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges