https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV13zo1KAAACFAYh&categoryId=AV13zo1KAAACFAYh&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=3

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

풀이 과정

 점수의 종류가 0이상 100이하 이므로 101개의 배열을 만들고, 점수가 입력되면 해당 점수와 동일한 인덱스로 배열 위치를 찾아 count++을 해줬습니다. 입력을 마친 후, 배열의 [0] ~ [100]까지 순회하며 최대 빈출 횟수를 갱신하며, 동시에 해당 점수(인덱스)를 갱신했습니다. 만약 최대빈출수와 비교되는 값이 같을 경우 인덱스(점수)를 비교해서 큰 값을 최대 빈출 점수에 넣었습니다.

 

느낀 점

 간단한 문제기에 빠르게 코딩 후 입력했지만 3번의 오답을 받았다. 첫번째는 최빈 점수가 아닌 횟수를 출력하도록 된 것을 고쳤고, 두번째는 배열의 인덱스 범위를 99점에서 100까지로 수정했고 세번째에서는 최대 빈도를 가진 값이 여러 개 일때, 큰값이 우선되도록 추가해주었다.

 내 코딩 습관에서 가장 큰 문제인 것 같다. '이정도는 감으로 해도 되겠다' 싶으면 어김없이 에러가 난다. 경험에 비해 오만했기 때문에 이런 실수가 발생한다고 생각한다. 설계 단계에서 좀더 깊이 생각하는 태도가 필요가 필요하다.

 

#include<bits/stdc++.h>
using namespace std;
 
int score[104];
int n, fn, temp, max_num;
 
int main() {
    int T;
    cin >> T;
    for (int t = 0; t < T; t++) {
        fill(&score[0], &score[0] + 104, 0);
        max_num = 0; fn = 0;
        cin >> n;
        for (int i = 0; i < 1000; i++) {
            cin >> temp;
            score[temp]++;
        }
         
        for (int i = 0; i < 101; i++) {
            if (score[i] > fn) {
                max_num = i;
                fn = score[i];
            }
            else if (score[i] == fn) {
                max_num = max(max_num, i);
            }
        }
 
        cout << "#" << n << " " << max_num << "\n";
    }
    return 0;
}

 

+ Recent posts