본문 바로가기

알고리즘/SW Expert Academy

200916 [S/W 문제해결 기본] 1일차 - 최빈수 구하기 / 실패

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13zo1KAAACFAYh&categoryId=AV13zo1KAAACFAYh&categoryType=CODE

 

SW Expert Academy

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

swexpertacademy.com

문제:

입력 값에서 가장 많이 나온 수를 출력합니다. 같은 횟수로 나오면 더 큰 값을 출력합니다.

입력 값의 점수를 인덱스로 사용해서 횟수를 셉니다.

처음엔 입력 값을 정렬 해야 하는 줄 알았는데 그럴 필요가 없었습니다.

 

#include <iostream>
using namespace std;

int main(int argc, char** argv){
	int test_case;
	int T;
	cin>>T;
    
    int input[1000];
    int score[100];
    int caseNum = 1;
	for(test_case = 1; test_case <= T; ++test_case){
        
        fill_n(input, 1000, -1);
        fill_n(score, 100, -1);
       
        int i = 0;
        for(i; i<1000; i++){
            cin >> input[i];
            score[input[i]]++;
        }
        
        int answer=0, best = 0;
        for(i; i<100; i++){
        	if(score[i] >= best){
                best = score[i];
            	answer = i;
            }
        }

        cout << '#' << caseNum << ' ' << answer << endl;
        ++caseNum;
	}
	return 0;
}

 

코드:

배열 선언 후 나중에 초기화 할 때 사용하는 함수를 배웠습니다.

fill_n 함수로 iostream에 포함 돼있습니다, fill_n(배열 이름, 배열 자리수, 초기화 값); 이렇게 사용합니다.

score에는 정상적으로 값이 나오는데, answer이 0만 출력 되네요. 

 

-----------------------------------------------------------------------------------------------------------------------------------

집에 가서 다시 해보겠습니다.