8월 2주차 과제 : 문제 3_중앙값 구하기
2023. 8. 13. 11:36ㆍAlgorithm ( 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;
}
정답입니다.!
'Algorithm ( p & swlug ) > Programmers' 카테고리의 다른 글
8월 3주차 과제 : 문제 3_삼각형의 완성조건(1) (0) | 2023.08.16 |
---|---|
8월 3주차 과제 : 문제 2_아이스 아메리카노 (0) | 2023.08.16 |
8월 2주차 과제 : 문제 2_중복된 숫자개수 (0) | 2023.08.13 |
8월 2주차 과제 : 문제 1_피자나눠먹기(2) (0) | 2023.08.12 |
8월 1주차 과제 : 문제 3_피자나눠먹기 (0) | 2023.08.03 |