본문 바로가기

cospro2급/cospro_3차

2021-05-14

cospro 2급 3번 문제

체조 선수의 점수 구해주기

 

문제설명

체조선수는 여러 심사위원의 점수 중 가장 높은 점수 하나와 가장 낮은 점수 하나를 제외하고 나머지 점수들의 평균을 계산하여 최종점수를 받는다. 단, 이때 소수점 이하의 수는 버린다.

예를 들어, A 선수가 10명의 심사위원에게 [35, 28, 98, 34, 20, 50, 85, 74, 71, 7]의 점수를 받았다. 가장 높은 점수인 98점과 가장 낮은 점수인 7점을 제외하고 나머지 8명의 심사위원의 점수 평균을 구하면 49.625점이다. 여기서 소수점 이하의 수를 버리면 49점이다.

각 심사위원이 매긴 점수가 담긴 배열 scores와 scores의 길이 scores_len이 매개 변수로 주어질 때, 이 선수가 받은 점수를 return 하도록 solution 함수를 완성한다.

 

매개변수 설명

심사위원이 준 점수가 들어있는 배열 scores와 scores의 길이 scores_len이 solution 함수의 매개변수로 주어진다.

   scores_len은 3 이상 100 이하의 자연수이다.

   심사위원이 부여하는 점수의 범위는 0 이상 100 이하의 정수이다.

 

return 값 설명

심사위원이 준 점수 중 가장 높은 점수와 가장 낮은 점수를 제외한 점수의 평균에서 소수점을 버린 값을 return 한다.

 

예시

 

예시 설명

예시 1) 문제에 나온 예와 같다.

예시 2) 가장 높은 점수는 1점이며, 가장 낮은 점수도 1점이다. 1점을 두 개 제외한 나머지 점수의 합은 3점이며, 평균은            1점이 된다.

 

코드 설명

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

int solution(int scores[], int scores_len) {
    int answer = 0;
	  int max=-1, min=101; 	//점수는 0 이상 100 이하이기 때문에 이런 값을 줌.
    for(int i=0; i<scores_len; i++){
			if(scores[i]>=max) max=i;  //max보다 큰 값이 나오면 max에 점수의 주소를 저장
		}
	 for(int i=0; i<scores_len; i++)
		if(scores[i]<=min) min=i;	//min보다 작은 값이 나오면 min에 점수의 주소를 저장

		for(int i=0; i<scores_len; i++){
			if(i != max) //max와 min이 아닌 값만 더해서 평균을 계산
				if(i != min)
					answer+=scores[i];
		}
		answer=answer/(scores_len-2);  //최댓값과 최솟값의 개수를 빼고 평균을 구함
    return answer;
}

int main() {
    int scores1[10] = {35, 28, 98, 34, 20, 50, 85, 74, 71, 7};
    int scores1_len = 10;
    int ret1 = solution(scores1, scores1_len);
    
    printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);
    
    int scores2[5] = {1, 1, 1, 1, 1};
    int scores2_len = 5;
    int ret2 = solution(scores2, scores2_len);
    
    printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
}

int max=-1, min=101 로 준 이유는 점수의 범위가 0 ~ 100인데 미리 max와 min에 있으면 그 값을 max나 min으로 인식할 수도 있기 때문에 범위 내에 없는 수로 초기화를 해준다.

for(int i=0; i<scores_len; i++){  if(scores[i]>=max) max=i;  } 

for(int i=0; iif(scores[i]>=max) max=scores[i];  }  

이 두 문장의 차이가 무엇일까? 2번째 문장으로 실행 시 1번 예제는 맞게 나오지만 2번 예제는 0이 나온다. 그 이유는 2번 예제의 값이 모두 1이기 때문이다. 2번째 문장은 모두 같은 값이기 때문에 max에 1이 들어가지 않는다. 그래서 0이 나온다. 해결할 방법은 최댓값의 주소 즉, i값을 max에 넣는 것이다. 

 

 

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

 

'cospro2급 > cospro_3차' 카테고리의 다른 글

2021-05-16  (0) 2021.05.16
2021-05-15  (0) 2021.05.15
2021-05-15  (0) 2021.05.15
2021-05-13  (0) 2021.05.13
2021-05-13  (0) 2021.05.13