본문 바로가기
Algorithm/백준

[백준] 1966번 : 프린터 큐 / c++

by 코딩친구 2020. 5. 25.
반응형

https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료��

www.acmicpc.net

 

[ 코드 ]

 

#include <iostream>
#include <queue>

using namespace std;

int main() {
    int answer = 0;
    int test_case;
    
    cin >> test_case;
    
    int n, m, ipt; //문서 길이, 원하는 location, 중요도(important)
    
    for (int i = 0; i < test_case; ++i) {
        answer = 0;
        
        cin >> n >> m;
        
        queue<pair<int, int>> q;
        priority_queue<int> pq;
        
        for (int j = 0; j < n; j++) {
            cin >> ipt;
            q.push({ j, ipt });
            pq.push(ipt);
        }
        
        while (!q.empty()) {
            int n = q.front().first;
            int p = q.front().second;
            q.pop();
            if (p == pq.top()) {
                pq.pop();
                answer++;
                if (n == m) {
                    cout << answer << endl;
                    break;
                }
            }
            else 
                q.push({ n,p });
        }
    }
}

 

 

 

 

 

 

솔직히 프로그래머스의 프린터 문제를 푸는 김에 백준 문제 수나 올리자고 바로 도전한 문제였다.

 

그런데 생각보다 변형하는 것도 귀찮았고, 또 까다로웠고,

 

main() 함수 안에 인자를 바로 안 주는 것 : cin 

return 값으로 주는 것이 아닌 것 : cout

또 입력할 케이스 갯수가 정해져서 따로 for문을 돌려야하는 것


이것도 매우 사람을 귀찮게 만들었다.

 

결론적으로 다른 문제보다 2배는 더 걸려서 푼 것 같다...... ㅂㄷㅂㄷㅂㄷㅂㄷ

 

 

 

 

 

 

대신 프로그래머스는 입력이 이미 주어진 곳에서 푸는 것이고,

이 문제는 직접 입력값을 주는 문제이다보니 생략할 수 있는 부분이 있었다.

 

중요도 부분에서,

 

vector <int> priorities;

      for(int i=0; i<N; i++){
        int tmp = 0;
        cin >> tmp;
        priorities.push_back(tmp); //문서 순서대로 받음.
      }

      for(int i = 0; i < priorities.size(); i++){
        q.push(make_pair(i, priorities[i]));
        priq.push(priorities[i]);
      }

 

예컨데 뭐 이런 식으로 두번에 걸쳐 하게 한 것을 그냥 그럴 필요 없이 인자 ipt로 하게 한 것이 훨 간단했다.

 

그리고 다른 사람의 코드를 보니 make_pair로 쓰지 않고 직접 넣은 부분도 나에게는 훨씬 쉬워 보이고 인상적이었다.

 

 

 

 

아 그리고!

 

백준에서 언어를 c++로 두고 푸는 당신,

pair를 만들 때,

 

queue <pair<int, int>> q;

 

이것을

 

queue <pair<int, int> > q;

 

이런 식으로 띄어쓰기하라고 백준이 꼽줄 수도 있다.

 

 

이 문제는 c++의 버전 문제이니 c++14 등 상위 버전에서는 괜찮다는 것을 알아두면 좋다.

 

 

 

 

* 오늘의 교훈

코드를 재활용하는 것도 참 좋지만, 그래도 다시 푸는 것도 나쁘지 않다.

(아니 사실 많이 나쁘다. 코드 날리고 두번째로 또 푸는 기분)

make_pair를 간단하게 생략 가능하다. 

c++의 버전 차이를 알아두자.

 

반응형