#74. 백준 2587번 문제 풀이: 대표값2 문제 원본 보기
어떤수들이 있을 때, 그 수들을 대표하는 값으로 흔히 쓰이는 건 평균값이다. 또 다른 대표값으로 중앙값이라는 것이 있다. 수들을 순서대로 늘어 놓았을 때 중앙에 놓인 값을 말한다. 다섯 개의 자연수가 주어질 때 이들의 평균과 중앙값을 구하시오. 입력: 한 줄에 하나씩의 자연수, 5개 출력: 첫줄에 평균, 둘째 줄에 중앙값 출력. 모두 자연수로 출력하시오.
입력/출력
--입력--
10
40
30
60
30
--출력--
34
30
문제풀이+해설
평균값은 루프를 돌려 전체 값을 더하고 나누어주면 된다. 
유의할 점은 자연수로 출력해야 한다.

대표값은 개수의 중앙값, 즉 2로 나누고, 숫자들을 소팅한 후에 중앙순서에 해당하는 값을 출력해 주면 된다.

여기서는 언어별 내장된 소팅함수 사용에 대한 제한이 없으므로, 내장 소팅함수를 사용해서 풀어보도록 하겠다.

C언어 소팅 내장함수 qsort 의 경우, 두 수를 비교하는 함수를 만들어 대입해 주어야 한다. 대부분 소스에 있는 루틴으로 작성되니, 잘 익혀두기 바랍니다.
code sol.
#include <stdio.h>
#include <stdlib.h>

// 소팅함수에 사용하기 위해 값을 비교해 주는 콜백 함수 작성
// 두 값을 받아 비교해서 크면 1, 작으면 -1, 같으면 0 리턴
int comp(const void *a, const void *b) {
  int n1 = *(int *)a, n2 = *(int *)b;
  if(n1 > n2) return 1; else if(n1 < n2) return -1;
  return 0;
}

int main() {
  int i;
  int ns[5]; // 숫자들을 저장할 배열
  int sum = 0; // 평균계산을 위해 합계를 저장할 변수. 
  for(i = 0; i < 5; i++) { // 5회 루프
    scanf("%d", &ns[i]); // 값을 하나씩 받아 정수형으로 변환 후 대입
    sum += ns[i]; // 수들의 합 계산
  }
  qsort(ns, 5, sizeof(int), comp); // 내장 소팅함수로 소팅
  printf("%d\n%d", sum / 5, ns[5 / 2]); 
  // 총합을 5로 나눈 평균과  전체개수(5)를 반으로 나눈 중앙값의 값 출력
  return 0;
}
© 코드솔 - CodeSol. All Rights Reserved.