문제 링크입니다: https://www.acmicpc.net/problem/1713
문제의 조건을 잘 읽고 그대로 코딩하면 되는 문제였습니다.
조건이 5개나 되기 때문에 꼼꼼하게 잘 읽어보시는 것을 추천드리고 vector와 pair를 연습하기 좋은 문제였던 것 같습니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MAX = 100 + 1;
int recommend[MAX];
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
//{시간, 사진}
vector<pair<int, int>> v(N, { 0, 0 });
int rec;
cin >> rec;
for (int i = 0; i < rec; i++)
{
int num;
cin >> num;
recommend[num]++;
bool replace = true;
for (int j = 0; j < N; j++)
{
//액자가 비어있는 경우
if (v[j].second == 0)
{
v[j].second = num;
v[j].first = i;
replace = false;
break;
}
//이미 액자에 있는 경우
else if (v[j].second == num)
{
replace = false;
break;
}
}
//사진을 바꿔야하는 경우
if (replace)
{
int idx = 0;
for (int j = 1; j < N; j++)
{
//제일 추천 수가 낮은 사진들이 여러개인 경우
if (recommend[v[j].second] == recommend[v[idx].second])
{
//가장 오래된
if (v[j].first < v[idx].first)
idx = j;
}
//추천수가 낮은 순서
else if (recommend[v[j].second] < recommend[v[idx].second])
idx = j;
}
recommend[v[idx].second] = 0; //바꿔쳐지면 추천수 초기화
v[idx].first = i;
v[idx].second = num;
}
}
vector<int> picture;
for (int i = 0; i < N; i++)
picture.push_back(v[i].second);
sort(picture.begin(), picture.end());
for (int i = 0; i < N; i++)
cout << picture[i] << " ";
cout << "\n";
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 10809번 알파벳 찾기 (0) | 2018.09.24 |
---|---|
백준 5624번 좋은 수 (0) | 2018.09.24 |
백준 12934번 턴 게임 (0) | 2018.09.23 |
백준 11974번 Subsequences Summing to Sevens (0) | 2018.09.23 |
백준 11973번 Angry Cows(Silver) (0) | 2018.09.23 |