알고리즘/BOJ

백준 1713번 후보 추천하기

꾸준함. 2018. 9. 24. 01:37

문제 링크입니다: 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