뭐라도 배우면 기록하자

[알고리즘 문제풀이] 최빈수 구하기 본문

프로그래밍언어공부/C

[알고리즘 문제풀이] 최빈수 구하기

무의욕자 2019. 1. 1. 00:32

문제 출처: https://swexpertacademy.com 의 1204번 문제


삼성 측에서 "※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다." 라고 하여 제 코드와 간단한 코드 설명만 업로드하겠습니다.


내가 작성한 코드        


#include <stdio.h>
#include <stdlib.h>
int main(void){
    int array[101];                                //점수는 0점 ~100점 사이의 정수이므로 배열의 Index를 학생 점수, 배열의 Value를 해당 점수 빈도수로 사용하기 위함
    int loop, score, max, maxIndex;
     
    scanf("%d", &loop);
    int * num = (int *)malloc(sizeof(int)*loop);    //Test case 수에 따라 해당 크기의 배열 생성(정답 넣어두기 위함)
        
    for(int i = 0; i < loop; i++){
        for(int j = 0 ; j < 101; j++){
            array[j] = 0;
        }
        int cur_loop;
        scanf("%d", &cur_loop);                    //이 부분 때문에 에러 꽤 났었네요.. input 모두가 학생 점수라고 생각했어서...
        for(int q = 0; q < 1000; q++){
            scanf("%d", &score) ;
            array[score]++;                        //Input(학생 점수)에 따라 배열의 Index(학생점수)의 value(빈도수)를 +1
        }
         
        max = 0;
        maxIndex = 0;
         
        for(int k = 0; k < 101; k++){
            if(max <= array[k]){            //최빈수를 구하는 부분
                max = array[k];
                maxIndex = k;
            }
        }
        num[cur_loop-1] = maxIndex;        //최빈수를 정답 배열에 초기화
    }
     
    for(int p = 1; p < loop+1; p++){
        printf("#%d %d\n", p, num[p-1]);
    }       
     
    free(num);
 
    return 0;
}




점수는 0점 ~ 100점 사이의 정수이니까 이를 기반으로 배열의 Index를 학생의 점수로 생각하는 것이 관건이었던 것 같습니다. 최빈수 자체는 갯수 파악(MAX값 찾기)로 쉬운 부분이나, 입력 값(학생 점수)를 어떻게 저장해둘 것이고 어떻게 빈도수를 파악할 것인가가 이번 문제를 풀 수 있는지 없는지를 나눈 것 같네요.



Comments