[ 백준알고리즘 ] 1966번 프린터큐


이번에 풀은 문제

printQueue

#include <iostream>
#include <queue>

using namespace std;

queue < pair <int,int> > q; //큐 q
priority_queue<int> pq; //우선순위 큐 pq
int N,M;
int result[100];

int printQueue(int a){
    int count = 0;
    if(N ==1) count = 1;
    else {
        while(!q.empty()){
            if(pq.top()!=q.front().second){ //pq에 넣은 weight와 q에 넣은 weight의 값이 다르면
                pair <int,int> tmp = q.front(); //q의 가장 앞 정수를 tmp에 넣기
                q.pop();
                q.push(tmp);

            } else { //pq의 weight와 q의 weight가 같을때
                if(M == q.front().first){ //M과 q에 넣은 weight의 위치 값이 같으면 인쇄
                    count++;
                    break;
                }else{
                    count++;
                    pq.pop();
                    q.pop();
                }
            }
        }
    }
    result[a] = count;
    return result[a];
}
int main(){
    int test_case;
    cin >> test_case;

    for(int i=0;i<test_case;i++){
        cin >> N >> M;

        //weight값 넣고 queue에 값 넣음
        for(int j=0;j<N;j++){
            int weight;
            cin >> weight;
            q.push(pair<int,int>(j,weight)); //weight와 위치(j)를 같이 push
            pq.push(weight);

        }
        printQueue(i);

        //queue 초기화
        while(!q.empty()&&!pq.empty()){
            q.pop();
            pq.pop();
        }
    }

    for(int i=0;i<test_case;i++)
        cout << result[i] << endl;

    return 0;
}

매번 c로만 queue 코드를 작성하다가 c++ 공부 시작하면서 처음 작성해본 cpp queue인데 여러가지 시행착오도 있었고 구글링도 있었지만 발전하는 과정이라고 생각한다.

다음에는 작성할 때 좀 더 코드줄을 줄이는게 목표

코드 작성하며 굿노트에 적었던 생각의 흐름

note_1966

예전에는 이렇게 안 적고 무작정 코드 작성하기로 달려들었는데, 나는 그렇게 하다보니 더 체계가 안잡혀있어서

더 코드가 작성 안되고 이상한 늪으로 빠지는 기분이 많았다. 그래서 처음 코드 작성할때는 문제의 요점을 이해하고 코드를 작성하려고 함