본문 바로가기
코딩 테스트/[c언어] cos pro 2급 기출문제

[No.49] 시험 등수 구하기 / cos pro 2급 c언어 기출 문제 5차 문제 9

by M개발자 2021. 5. 27.
반응형

시험 등수 구하기


문제 설명

 

시험 점수에 따라 학생의 순위를 매기려 합니다. 동점자 순위는 가능한 순위 중 가장 높은 순위로 매깁니다.
예를 들어 학생별 점수가 [90, 87, 87, 23, 35, 28, 12, 46]이면, 학생별 순위는 [1, 2, 2, 7, 5, 6, 8, 4]입니다.

모든 학생의 점수를 담은 배열 score, 배열 score의 길이 score_len이 매개변수로 주어질 때, 순위를 담은 배열을 return 하도록 solution 함수를 작성해주세요.


예시

 

score score_len return 
[90, 87, 87, 23, 35, 28, 12, 46] 8 [1, 2, 2, 7, 5, 6, 8, 4]
[10, 20, 20, 30] 4 [4, 2, 2, 1]

코드 해석 및 전체 코드

 

솔루션

첫 번째 for문은 점수의 순위를 구하기 위해 0 ~ n까지 반복한다. (한 번씩 반복문을 실행하기 위해서)

두 번째 for문은 점수 k를 다른 점수들과 비교하여 순위를 구하기 위해 반복한다. 

총 for문은 n * n 번 실행한다. 

 

answer ) 순위를 담은 배열로 동적 메모리 할당을 준다. 

 

for ) i ~ score_len - 1까지 반복한다.

answer[i]) answer[i]를 반복할 때마다 1로 초기화해준다. 

1등부터 ~ n 등까지의 등수를 구하기 때문에 1로 초깃값을 준다. 

for in for ) 0 ~ score_len - 1까지 반복한다. 

if in for ) score[i]가 score[j]보다 작을 경우 j보다 순위가 떨어지므로 answer[i]를 1 증가한다. 

 

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int* solution(int score[], int score_len) {
    int* answer;
    answer = (int*)malloc(sizeof(int) * score_len);
	
	for(int i = 0; i < score_len; i++){
		answer[i] = 1;
		for(int j = 0; j < score_len; j++){
			if(score[i] < score[j]) answer[i]++;
		}
	}
    return answer;
}
int main() {
    int score1[] = {90, 87, 87, 23, 35, 28, 12, 46};
    int score_len1 = 8;
    int *ret1 = solution(score1, score_len1);

    printf("solution 함수의 반환 값은 [");
    for(int i = 0; i < score_len1; i++){
        if (i != 0)
            printf(", ");
        printf("%d", ret1[i]);
    }
    printf("] 입니다.\n");
    
    int score2[] = {10, 20, 20, 30};
    int score_len2 = 4;
    int *ret2 = solution(score2, score_len2);

    printf("solution 함수의 반환 값은 [");
    for(int i = 0; i < score_len2; i++){
        if (i != 0)
            printf(", ");
        printf("%d", ret2[i]);
    }
    printf("] 입니다.\n");
}

cos pro 2급 기출문제

github

 

구름 goormedu COS PRO 2급 기출문제 - C언어

 

반응형

댓글