알고리즘/algospot

algospot MATCHORDER

꾸준함. 2018. 2. 13. 23:17

문제 링크입니다: https://algospot.com/judge/problem/read/MATCHORDER

N의 범위가 1~100이기 때문에 완전탐색법과 동적계획법을 사용하면 시간초과가 발생하는 문제였습니다.

따라서 탐욕 알고리즘을 사용하여 프로그램을 작성했습니다.


#include <iostream>

#include <algorithm>

#include <vector>

#include <set>

using namespace std;

 

int order(const vector<int> &russian, const vector<int> &korean)

{

        int length = russian.size(), wins = 0;

        //아직 남아 있는 선수들의 레이팅

        multiset<int> ratings(korean.begin(), korean.end()); //성적 순 정렬

       

        for (int rus = 0; rus < length; rus++)

        {

               //가장 레이팅 높은 한국 선수가 이길 수 없는 경우

               //가장 레이팅이 낮은 선수와 경기시킴

               if (*ratings.rbegin() < russian[rus])

                       ratings.erase(ratings.begin());

               //이 외의 경우 이길 수 있는 선수 중 가장 레이팅이 낮은 선수와 경기시킴

               else

               {

                       ratings.erase(ratings.lower_bound(russian[rus]));

                       wins++;

               }

        }

        return wins;

}

 

int main(void)

{

        int test_case;

        cin >> test_case;

        if (test_case < 1 || test_case>50)

               exit(-1);

 

        for (int i = 0; i < test_case; i++)

        {

               vector<int> russian; //러시아 선수들

               vector<int> korean; //한국 선수들

               int N;

               cin >> N;

               if (N < 1 || N>100)

                       exit(-1);

               //러시아 선수들 점수

               for (int j = 0; j < N; j++)

               {

                       int score;

                       cin >> score;

                       if (score < 1 || score>4000)

                              exit(-1);

                       russian.push_back(score);

               }

               //한국선수들 점수

               for (int j = 0; j < N; j++)

               {

                       int score;

                       cin >> score;

                       if (score < 1 || score>4000)

                              exit(-1);

                       korean.push_back(score);

               }

               cout << order(russian, korean) << endl;

        }

        return 0;

}

개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~


[참고] 프로그래밍 대회에서 배우는 알고리즘 문제해결전략

반응형

'알고리즘 > algospot' 카테고리의 다른 글

algospot LUNCHBOX  (0) 2018.02.15
c++ 회의실 배정 알고리즘(DP 사용)  (2) 2018.02.13
algospot GENIUS  (0) 2018.02.12
algospot SUSHI  (0) 2018.02.11
algospot TRIANGLEPATH  (0) 2018.02.11