본문 바로가기

알고리즘/줄울림 여름방학 알고리즘 스터디

[BOJ/C++] 1713 후보 추천하기

https://www.acmicpc.net/problem/1713

 

#include<iostream>
#include<vector>
#include <algorithm>
using namespace std;
int n, t;
int total[101] ={0,};
vector<int> gallery;

void insert(int st){
    gallery.push_back(st);
    total[st]++;
}

int main(){
    
    cin >> n;
    cin >> t;
    while(t--){
        int st; cin >> st;
        if(find(gallery.begin(), gallery.end(), st) != gallery.end()){
                // 갤러리에 있는 후보면 추천수만 증가
            total[st]++;        
        }else{
            int total_min = 1001; int total_i = -1;
            if(gallery.size()>=n) {
                // 갤러리에 있는 원소중 추천수 제일 작은거 찾기
                for(int i=0; i<gallery.size(); i++){
                    int k = gallery[i];
                    if(total[k]<total_min){ 
                        total_min = total[k];
                        total_i = i;
                    }
                }

                total[gallery[total_i]] = 0;
                gallery.erase(gallery.begin() + total_i); //삭제

            }
            insert(st);

        }

        // for (int x : gallery) {
        //     cout << x << " ";
        // }

        // cout <<"\n";
    }

    sort(gallery.rbegin(), gallery.rend());
    while(!gallery.empty()){
        cout << gallery.back() << " ";
        gallery.pop_back();
    }



}

 

갤러리에 전시된 학생의 번호를 vector로 저장하고 push_back을 사용해서 자동으로 게시일 순으로 저장되게 하였다. 또한 학생에 대한 추천수를 모두 저장하는 total 배열을 만들어 추천수를 저장하여 바로 인덱스 접근이 가능하도록 하였다.