입력)
학생의 수 1000명
각 학생의 점수는 0점 이상 100점 이하의 값
출력)
최빈수를 출력
최빈수가 여러 개 일 때에는 가장 큰 점수를 출력
입, 출력 분석)
(생략)
예시 분석)
(생략)
핵심)
히스토그램을 한 번이라도 구현해본 적이 있다면 엄청 쉬운 문제다.
0부터 100까지의 점수를 index로 가지는 배열을 만들어 빈도수를 다루는 것이 핵심이다.
1000명의 점수를 읽으면서 배열[점수]에 해당하는 count를 올려주면,
해당 배열을 앞에서부터 count 같거나 크다면 갱신해주면 된다.
실수)
- 처음엔 빈도수가 같을 때 큰 수를 출력한다는 조건을 까맣게 잊고 있다가
if(cnt < student[n]) => if(cnt <= student[n]) 로 수정하였다.
- 마지막으로 들어오는 입력이 테스트 케이스 번호 + 1000개의 숫자들이라서,
scanf("%d", &test_case);를 삽입하였다.
구현)
#include<iostream>
using namespace std;
int N = 1000;
int main(int argc, char** argv)
{
int test_case;
int T;
cin >> T;
for (test_case = 1; test_case <= T; ++test_case) {
scanf("%d", &test_case);
int MODE = 0;
int student[101] = {0,};
int score = 0;
for (int n = 0; n < N; n++) {
scanf("%d", &score);
++student[score];
}
int cnt = student[0];
for (int n = 1; n < 101; n++) {
if(cnt < student[n]) {
MODE = n;
cnt = student[n];
}
}
printf("#%d %d\n", test_case, MODE);
}
return 0;
}
배열과 index로 설계를 했지만 코딩을 하다보면 나도 모르게 헷갈리는 경우가 있는 것 같다.
그리고 개발자는 여러 경험들을 통해 만들어진 습관이나 편견을 조심 또 조심해야하는 것 같다.
모든 문제를 꼼꼼히 보고 기억하는 습관을 들이자!
'Algorithm&Problem > [Problems] SWEA' 카테고리의 다른 글
[D4] 1210.Ladder1 (0) | 2020.08.18 |
---|---|
[D3] 1206. View (0) | 2020.08.08 |
[D3] 1208. Flatten (0) | 2020.07.25 |
[D2] 1859. 백만 장자 프로젝트 (0) | 2020.07.21 |
[D1] 2072. 홀수만 더하기 (0) | 2020.07.21 |