본문 바로가기

c++/Baekjoon Online

백준 1713: 후보 추천하기 c++

www.acmicpc.net/problem/1713

 

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