ALGORITHM

1966_프린터 큐

서울소시민 2018. 4. 18. 18:03

1966_프린터 큐

인쇄물을 몇번째에 출력하게 되는지 묻는 문제이다.

  1. index와 value를 가진 pair를 queue에 넣는다.

  2. 입력한 값을 vector에 넣은 다음 정렬한다.

  3. 규칙에 맞게 프린트하고, 맨뒤로 보내고를 반복하다가 입력한 index가 나오면 지금까지 출력한 횟수를 나타내고 종료한다.

code


#include <stdio.h>
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;


int main() {
   int T;
   cin >> T;
   while(T--){
       int len, index;
       vector<int> maxVector;
       pair<int, int> p1;
       queue< pair<int, int> > q1;
       cin >> len >> index;
       
       for(int j=0;j<len;j++){
           int number;
           cin >> number;
           maxVector.push_back(number);
           p1 = make_pair(number, j);
           q1.push(p1);
      }
       
       
       sort(maxVector.begin(), maxVector.end());
       int count=0;
       while(!(maxVector.empty())){
           // 큐에서 가장 큰값이면?
           if(maxVector.back() == q1.front().first){
               // 무조건 프린트는 한다. 그래서 시작부터 count++
               count++;
               // 일치하면 출력후 break
               if(q1.front().second == index){
                   cout << count <<endl;
                   break;
              }
               maxVector.pop_back();
               q1.pop(); // 프린트 큐에서 프린트한다.
          }else {
               p1 = q1.front();
               // 맨앞의 값을 맨뒤로 보내준다.
               q1.pop();
               q1.push(p1);
          }
      }
       
  }
}

'ALGORITHM' 카테고리의 다른 글

10974_모든순열  (0) 2018.04.21
1057_토너먼트  (0) 2018.04.20
sw_1209_SUM  (0) 2018.04.17
sw_1226_미로1  (0) 2018.04.12
4014. [모의 SW 역량테스트] 활주로 건설  (0) 2018.03.30