1713번: 후보 추천하기
첫째 줄에는 사진틀의 개수 N이 주어진다. (1≤N≤20) 둘째 줄에는 전체 학생의 총 추천 횟수가 주어지고, 셋째 줄에는 추천받은 학생을 나타내는 번호가 빈 칸을 사이에 두고 추천받은 순서대로 �
www.acmicpc.net
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<pair<int, int> >picture; // 학생 번호, 추천 수
int n;
bool comp(pair<int, int>a, pair<int, int> b)
{
return a.first < b.first;
}
void choose()
{
int min_count = 987654321;
for (int i = 0; i < picture.size(); i++)
{
min_count = min(min_count, picture[i].second);
}
for (int i = 0; i < picture.size(); i++)
{
if (min_count == picture[i].second)
{
picture.erase(picture.begin()+i); // 등록된게 시간 순이니까 젤 앞에 꺼!
break;
}
}
}
int main()
{
int k,student;
int flag;
cin >> n;
cin >> k;
for (int i = 0; i < k; i++)
{
cin >> student;
flag = 0;
for (int i = 0; i < picture.size(); i++)//이미 추천된 후보인지 판단
{
if (student == picture[i].first)
{
flag = 1; //이미 추천되어 있음
picture[i].second++; // 추천횟수 증가
break;
}
}
if (flag == 0)//새로운 후보다
{
if (picture.size() < n)//아직 액자 남았다
{
picture.push_back(make_pair(student, 1));
}
else if (picture.size() == n) //액자 가득 참
{
choose(); // 사진 한개 삭제
picture.push_back(make_pair(student, 1));
}
}
}
sort(picture.begin(), picture.end(), comp);
for (int i = 0; i < picture.size(); i++)
{
cout << picture[i].first << " ";
}
return 0;
}
'c++ > Baekjoon Online' 카테고리의 다른 글
백준 9205 : 맥주마시면서 걸어가기 c++ (0) | 2020.09.06 |
---|---|
백준 15684 : 사다리 조작 C++ (0) | 2020.09.06 |
백준 13458 : 시험 감독 c++ (0) | 2020.09.06 |
백준 10836: 여왕벌 C++ (0) | 2020.09.06 |
백준 10040: 투표 c++ (0) | 2020.09.06 |