촉촉한초코칩

[백준] 2587(대표값2) c언어 본문

Algorithm

[백준] 2587(대표값2) c언어

햄친구베이컨 2023. 3. 25. 12:56

문제

어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30의 평균은 (10 + 40 + 30 + 60 + 30) / 5 = 170 / 5 = 34가 된다.

평균 이외의 또 다른 대표값으로 중앙값이라는 것이 있다. 중앙값은 주어진 수를 크기 순서대로 늘어 놓았을 때 가장 중앙에 놓인 값이다. 예를 들어 10, 40, 30, 60, 30의 경우, 크기 순서대로 늘어 놓으면

10 30 30 40 60

이 되고 따라서 중앙값은 30이 된다.

다섯 개의 자연수가 주어질 때 이들의 평균과 중앙값을 구하는 프로그램을 작성하시오.

입력

첫째 줄부터 다섯 번째 줄까지 한 줄에 하나씩 자연수가 주어진다. 주어지는 자연수는 100 보다 작은 10의 배수이다.

출력

첫째 줄에는 평균을 출력하고, 둘째 줄에는 중앙값을 출력한다. 평균과 중앙값은 모두 자연수이다.

 


 

입력값들은 정렬되지 않은 값들이기 때문에 중앙값을 구하려면 오름차순으로 정렬해야 한다. 

앞의 값과 그 다음값을 비교해서 앞의 값이 크면 자리를 바꾼다. 

  for(int i=0; i<5; i++) {
    for(int j=i+1; j<5; j++) {
      if(num[i] > num[j]) {
        int tmp = num[j];
        num[j] = num[i];
        num[i] = tmp;
      }
    }
  }

 

입력값은 5개밖에 되지 않기 때문에 쉽게 배열이 2번째 값에 접근해 출력하면 된다. 

#include <stdio.h>

int main(void) {
  int num[5];
  int sum = 0, mid = 0;
  
  for(int i=0; i<5; i++) {
    scanf("%d", &num[i]);
    sum += num[i];
  }

  for(int i=0; i<5; i++) {
    for(int j=i+1; j<5; j++) {
      if(num[i] > num[j]) {
        int tmp = num[j];
        num[j] = num[i];
        num[i] = tmp;
      }
    }
  }
  printf("%d\n", sum/5);
  printf("%d\n", num[2]);
}

 

번외) 배열 개수를 입력받고 중앙값을 구한다면?

> 배열 개수만큼 배열 크기를 할당한다. 

> 중앙값은 n/2 값으로 구한다. 

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

//배열 개수를 입력받고 중앙값을 구한다면?
int main(void) {
  int n;
  scanf("%d", &n);

  int *num;
  num = calloc(n, sizeof(int));
  
  int sum = 0;
  
  for(int i=0; i<n; i++) {
    scanf("%d", &num[i]);
    sum += num[i];
  }

  for(int i=0; i<n; i++) {
    for(int j=i+1; j<n; j++) {
      if(num[i] > num[j]) {
        int tmp = num[j];
        num[j] = num[i];
        num[i] = tmp;
      }
    }
  }

  int mid = n/2;
  printf("%d\n", sum/n);
  printf("%d\n", num[mid]);

  free(num);
}

 

'Algorithm' 카테고리의 다른 글

[백준] 10773(제로) c언어  (0) 2023.03.31
04. 스택과 큐  (0) 2023.03.31
03. 검색  (0) 2023.03.22
[백준] 2566(최댓값) c언어  (0) 2023.03.18
[백준] 2738(행렬 덧셈) c언어  (0) 2023.03.13