[C] 프로그래머스 스쿨_6주차 문제 3: 중앙값 구하기

[1] 문제
문제 설명
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 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입니다.
[2] 정답 및 해석
#.1 정답 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> int solution(int array[], size_t array_len) { int i, j, temp = 0; // 버블 정렬을 이용하여 배열을 오름차순으로 정렬 for (i = 1; i < array_len; i++) { for (j = 0; j < array_len - i; j++) { if (array[j] > array[j + 1]) { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } // 중앙값을 반환 return array[array_len / 2]; // 올바른 방식으로 중앙값을 반환 } | cs |
#.2 해석
1 | #include <stdio.h> | cs |
- stdio.h 헤더 파일을 포함시킨다. 이 헤더 파일은 표준 입출력 함수를 사용하기 위해 필요한 기능을 제공한다.
1 | int solution(int array[], size_t array_len) { | cs |
- solution 함수를 정의한다.
- 함수의 반환값은 int 타입이다.
- 함수에는 두 개의 매개변수가 전달된다.
- array: 정수형 배열을 나타내는 포인터이다. 정렬해야 할 값들이 들어 있다.
- array_len: 배열의 길이를 나타내는 size_t 타입의 변수이다.
1 | int i, j, temp = 0; | cs |
- i, j, temp라는 세 개의 정수형 변수를 선언하고 0으로 초기화한다.
- i와 j는 반복문에서 사용할 변수이다.
- temp는 값들을 교환하기 위해 사용될 임시 변수이다.
1 2 3 4 5 6 7 8 9 | for (i = 1; i < array_len; i++) { for (j = 0; j < array_len - i; j++) { if (array[j] > array[j + 1]) { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } | cs |
- 이 부분은 버블 정렬 알고리즘을 구현하고 있습니다.
- i와 j 반복문을 사용하여 배열을 순회하며 정렬을 진행한다.
- 만약 array[j]가 array[j + 1]보다 크다면, 두 값을 교환한다.
- 이렇게 하면 큰 값들이 배열의 뒷쪽으로 이동하면서 정렬이 이루어진다.
1 | return array[array_len / 2]; | cs |
- 정렬된 배열의 중앙값을 반환한다.
- array_len / 2 인덱스에 있는 값을 반환하여 중앙값을 얻는다.
[3] 주의할 점
✔️ 현재 코드에서 array_len - i와 j + 1 등의 인덱스를 사용할 때, 이 값들이 배열의 범위를 벗어나지 않도록 주의해야 한다.
[4] 추가 학습
✏️ 버블 정렬이란? :
https://terms.naver.com/entry.naver?docId=2270437&cid=51173&categoryId=51173
버블 정렬
버블 정렬(bubble sort)은 서로 이웃한 데이터들을 비교하며 가장 큰 데이터를 가장 뒤로 보내며 정렬하는 방식이다. 버블 정렬의 동작 과정을 [그림 8-3]의 데이터를 이용해서 살펴보자. ① 첫 번째
terms.naver.com
✏️ 버블 정렬에 대한 C 프로그램:
https://terms.naver.com/entry.naver?docId=2270505&ref=y&cid=51173&categoryId=51173
버블 정렬에 대한 C 프로그램
https://terms.naver.com/entry.naver?cid=51173&categoryId=51173&docId=2270505&ref=y
terms.naver.com
[5] 느낀 점
버블 정렬은 배열해야 하는 원소가 커지면 정렬하는 데에 시간이 오래 걸려서 비효율적인 방법이라고 한다.
나에게는 버블 정렬을 이용하는 게 익숙하고 쉬운 방법이었지만, 다른 방법도 있다고 해서 찾아봤다.
바로, 'qsort' 함수를 이용하는 방법이 있다고 한다.
✏️ qsort 란?:
https://blog.naver.com/ygs1090/223105957292
(C언어) qsort 함수로 숫자, 문자열 정렬하기
오늘은 qsort함수에 대해 알아보도록 합시다. qsort는 C언어에서 제공하는 정렬 라이브러리 함수입니다. ...
blog.naver.com
'포인터', '구조체' 개념이 익숙하지가 않아서 버블 정렬을 사용했는데, 나중에는 공부를 더 해서 qsort 함수도 잘 사용해보고 싶다!