지식보부상님의 공부 일지

SWEA 1984번: 중간 평균값 구하기 (D2) 본문

C언어 문제풀이

SWEA 1984번: 중간 평균값 구하기 (D2)

지식보부상님 2023. 11. 12. 01:06

SWEA 1984번: 중간 평균값 구하기 (D2)

10개의 수를 입력 받아, 최대 수와 최소 수를 제외한 나머지의 평균값을 출력하는 프로그램을 작성하라.

(소수점 첫째 자리에서 반올림한 정수를 출력한다.)


[제약 사항]

각 수는 0 이상 10000 이하의 정수이다.


[입력]

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 10개의 수가 주어진다.


[출력]

출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

 

qsort를 이용하여 해결한 방법

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

int compare(int *a, int *b) {
	return *a > *b ? 1 : *a < *b ? -1 : 0;
}

int main() {
	int tc,  sum;
	double avg;
	int i , j;
	int number[10];

	scanf("%d", &tc);

	for (i = 0; i < tc; i++) {
		avg = 0;
		sum = 0;
		
		for (j = 0; j < 10; j++) {
			scanf("%d", &number[j]);
		}
		
		qsort(number, 10, 4, compare);
		
		for (j = 1; j < 9; j++) {
			sum += number[j];
		}
		avg = (sum) / 8.0;

		printf("#%d %.f\n", i + 1, avg);
	}
	return 0;
}

 

채점시 qsort 사용이 불가하므로, 각각 최대 / 최솟값을 찾아 해결한 경우

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

int main() {
	int tc,  sum, max, min;
	double avg;
	int i , j;
	int number[10];

	scanf("%d", &tc);

	for (i = 0; i < tc; i++) {
		sum = 0;
		
		for (j = 0; j < 10; j++) {
			scanf("%d", &number[j]);
		}
		
        max=number[0];
        min=number[0];
        
		for (j = 0; j < 10; j++) {
			if (max < number[j]){
				max = number[j];
            }
			if (min > number[j]){
				min = number[j];
            }
			sum += number[j];
		}
		sum -= max;
		sum -= min;

		avg = (sum) / 8.0;

		printf("#%d %.f\n", i + 1, avg);
	}
	return 0;
}

 

채점 결과