Difficulty 2
[문제]
[코드 및 결과]
#include <stdio.h>
#include <math.h>
int main(int argc, char** argv) {
int T, N;
scanf("%d", &T);
for (int t = 1; t <= T; t++) {
int arr[10] = {0};
float sum = 0;
int max = 0;
int min = 10000;
float result = 0;
for (int i = 0; i < 10; i++) {
scanf("%d ", &N);
arr[i] = N;
sum += arr[i];
}
for (int j = 0; j < 10; j++) {
if (arr[j] > max)
max = arr[j];
else if (arr[j] < min)
min = arr[j];
}
result = (sum - max - min) / 8;
printf("#%d %.0f\n", t, round(result));
}
return 0;
}
[설명]
테스트케이스 T, 입력받을 숫자 N, 한 줄에 입력받을 숫자들을 저장할 배열 arr, 최대값 max, 최소값 min을 정수로 선언하고 수들의 합 sum, 평균(결과) result를 실수형으로 선언한다.
이때, 각 수는 0부터 10000까지의 수이므로 초기 최댓값은 0으로, 초기 최솟값은 10000으로 설정해준다.
각 수(N)을 입력 받을 때마다 배열 arr에 저장해주고, 각 값들을 sum에 더해준다.
위의 과정을 통해 완성된 배열 arr을 한바퀴 돌면서 해당 배열의 값이 max 값보다 크면 max값에 저장하고 min 값보다 작으면 min값에 저장한다.
구해야 하는 건 최댓값과 최솟값을 뺀 나머지 수들의 평균이므로 sum에서 max와 min을 빼준 값을 8로 나눈 값을 result에 저장한다.
문제에서 소수점 첫째자리에서 반올림한 정수를 출력하라고 하였으므로 math 헤더파일을 넣고 round 함수를 사용하여 반올림해준 뒤 이 값을 출력하도록 한다.
/* 여기 써져있는 input 외에 다른 input에 대하여 반올림이 제대로 되지 않아 fail이 떴다.
이전에 비슷한 문제를 0.5 * 10^(-n)을 더해줌으로써 해결한 적이 있어 result에 0.5, 0.05를 더해서 보정해보려고 했지만 둘 다 실패했다.
처음에 되도록이면 함수를 쓰고 싶지 않아서 어떻게 해보려고 했지만 마땅한 해결 방안을 찾을 수 없어 결국에는 math 헤더파일을 넣어 round 함수를 사용해서 해결했다. */
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
'C > SWEA' 카테고리의 다른 글
[SWEA] #1946. 간단한 압축 풀기 (0) | 2021.11.19 |
---|---|
[SWEA] #1926. 간단한 369게임 (0) | 2021.11.19 |
[SWEA] #2056. 연월일 달력 (0) | 2021.11.14 |
[SWEA] #1970. 쉬운 거스름돈 (0) | 2021.11.06 |
[SWEA] #2046. 스탬프 찍기 (0) | 2021.11.06 |
댓글