BOJ 1966 프린터 큐 c++

백준 1966 cpp 프린터 큐

 

문제 링크 : https://www.acmicpc.net/problem/1966

 

정답률이 높았음에도 불구하고 필자에겐 설계에 꽤 많은 시간이 걸린 문제였다. 문제를 해결할 수 있었던 가장 핵심이 된 아이디어는 Queue에 하나씩 담을 때 목표가 되는 녀석을 표시해놓기 위해 int 형 queue가 아닌 pair<int, char> 형으로 Queue를 선언했다. 그래서 담을 때 목표가 되는 녀석은 char 부분에 't'를 담고 나머지는 전부 공백을 담았다.

 

시간도 2초로 넉넉하고 N도 100이하, 중요도도 1~9 사이었기에 시간 복잡도는 고려하지 않았다. 큐의 맨 앞에 있는 요소를 확인할 때마다 getMaxNumber함수를 호출해 큐를 처음부터 끝까지 돌았고, 가장 큰 숫자가 나올 때에만 cnt를 증가시켰다. 가장 큰 숫자가 아닌 경우에는 큐의 뒤로 보내버렸다. 그리고 가장 큰 숫자가 나왔을 때 pair의 char부분이 't'인 경우 출력해버리고 다음 테스트케이스로 넘어가도록 했다. 당연히 넘어갈 때 Q는 새로운 정보를 받아야 하므로 Q를 비워주는 과정도 거쳤다.

 

#include <bits/stdc++.h>
using namespace std;

queue<pair<int, char>> Q;

int getMaxNumber(void)
{
    int maxNumber = -1;
    queue<pair<int, char>> tempQ = Q;
    while (!tempQ.empty())
    {
        maxNumber = max(tempQ.front().first, maxNumber);
        tempQ.pop();
    }
    return maxNumber;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int N, M;
    int testcaseCount;
    cin >> testcaseCount;

    while (testcaseCount--)
    {
        cin >> N >> M;
        int cnt = 0;
        for (int i = 0; i < N; i++)
        {
            int paper;
            cin >> paper;
            if (i == M)
                Q.push({paper, 't'});
            else
                Q.push({paper, ' '});
        }
        while (true)
        {
            if (Q.front().first == getMaxNumber())
            {
                cnt++;
                if (Q.front().second == 't')
                {
                    cout << cnt << '\n';
                    while (!Q.empty())
                        Q.pop();
                    break;
                }
                else
                    Q.pop();
            }
            else
            {
                pair<int, char> p = Q.front();
                Q.pop();
                Q.push(p);
            }
        }        
    }
}

 

'Algorithm' 카테고리의 다른 글

BOJ 2231 c++ 분해합  (4) 2020.11.16
BOJ 2108 C++ 통계학  (0) 2020.11.14
BOJ 1929 소수 구하기 C++  (0) 2020.11.12
BOJ 1018 체스판 다시 칠하기 c++  (0) 2020.11.09
BOJ 1259 팰린드롬수 c++  (0) 2020.11.09
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom