입력)

학생의 수 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

+ Recent posts