SWEA 1204. 최빈수 구하기

Polynomeer·2020년 4월 21일
0

SW Expert Academy

목록 보기
1/4
post-thumbnail

SWEA 1204. 최빈수 구하기

※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

문제 설명

어느 고등학교에서 실시한 1000명의 수학 성적을 토대로 통계 자료를 만들려고 한다.

이때, 이 학교에서는 최빈수를 이용하여 학생들의 평균 수준을 짐작하는데, 여기서 최빈수는 특정 자료에서 가장 여러 번 나타나는 값을 의미한다.

다음과 같은 수 분포가 있으면,

10, 8, 7, 2, 2, 4, 8, 8, 8, 9, 5, 5, 3

최빈수는 8이 된다.

최빈수를 출력하는 프로그램을 작성하여라 (단, 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라).

[제약 사항]

학생의 수는 1000명이며, 각 학생의 점수는 0점 이상 100점 이하의 값이다.

[입력]

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고 그 다음 줄부터는 점수가 주어진다.

[출력]

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스에 대한 답을 출력한다.

1. 문제 해석

이 문제는 배열의 인덱스에 해당하는 값을 카운트하는 방식에 대해 학습할 수 있는 문제이다.

score[100]배열을 만들고, 각 점수에 해당하는 부분을 score[해당 학생의 점수]++ 해주면 결과적으로 모든 학생들의 점수에 대한 카운트가 저장될 것이다.

그러면 0점부터 100점 까지 카운트 값이 크거나 같은 것에 해당하는 점수(인덱스)를 정답으로 출력하면 된다. 이때 카운트 값을 출력하는 것이 아닌 인덱스 값을 출력해야 한다는 점에 주의해야 한다. 인덱스 값이 점수에 해당하기 때문이다.

2. 문제 풀이

student배열 사용

#include <iostream>
using namespace std;
int student[1000];

int solution(int score[100]){
    int answer=0, max_score=0;
    for(int i=0;i<100;++i){
        if(max_score<=score[i]) {
            max_score=score[i];
            answer=i;
        }
    }
    return answer;
}

int main(int argc, char** argv) {
    int test_case;
    int T;
    cin >> T;
    for(test_case = 1; test_case <= T; ++test_case) {
        int tn; cin >> tn;
        int score[100]={0,};
        for(int i=0;i<1000;++i){
            cin >> student[i];
            score[student[i]]+=1;
        }
        cout << "#" << test_case << " " << solution(score) << "\n";
    }
    return 0;
}

student배열 사용 x

#include <iostream>
using namespace std;
#define STUD_NUM 1000

int solve(){
    int answer = 0, score, scores[100] = {0};
    for(int i=0; i<STUD_NUM; ++i){
        cin >> score;
        scores[score]++;
    }
    int max_score = 0;
    for(int i=0; i<100; ++i){
        if(max_score <= scores[i]){
            max_score = scores[i];
            answer = i;
        }
    }
    return answer;
}
int main(int argc, char** argv) {
    int test_case, T;
    freopen("1204_input.txt", "r", stdin);
    cin >> T;
    for(test_case = 1; test_case <= T; ++test_case) {
        int test_num;
        cin >> test_num;
        cout << "#" << test_case << " " << solve() << endl;
    }
    return 0;
}
profile
어려운 문제를 어렵지 않게.

0개의 댓글