[문제 링크]

 

1966번: 프린터 큐

문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를

www.acmicpc.net


문제의 취지에 맞게 queue 자료구조를 사용해서 풀었다.

큐는 맨 앞에 원소값만 참조할 수 있기때문에 임시 큐를 생성하여 전체 원소들과 비교하였다.

코드는 다음과 같이 진행된다.

맨 앞의 원소와 뒤에 원소들 비교 --> 더 큰 원소가 존재한다면 해당 원소를 맨 뒤로 보냄 --> 더 큰 원소가 존재하지 않을 때까지 반복 --> 찾고있는 원소 위치와 비교 --> 틀리다면 횟수 1증가, 앞에 원소 제거 --> 맞다면 횟수 출력


#include <iostream>
#include <queue>
using namespace std;
 
queue<int> wait;
int Solution(int find, int cnt)
{
    queue<int> temp = wait;
    int pick = temp.front();
    int len = temp.size();
    for (int i = 0; i < len; i++)
    {
        if (pick < temp.front())
        {
            wait.pop();
            wait.push(pick);
            if (find == 0) find = len - 1;
            else find--;
            return Solution(find, cnt);
        }
        else temp.pop();
    }
    cnt++;
    if(find != 0)
    {
        wait.pop();
        find--;
        return Solution(find, cnt);
    }
    else return cnt;
}
 
int main(void)
{
    int testcase;
    cin >> testcase;
    while (testcase--)
    {
        int imp, fd;
        cin >> imp >> fd;
        for (int i = 0; i < imp; i++)
        {
            int n;
            cin >> n;
            wait.push(n);
        }
        cout << Solution(fd, 0<< endl;
        while (!wait.empty()) wait.pop();
    }
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

알고리즘 200일 프로젝트 - 8day

다른 사람들은 우선순위큐를 사용하여 쉽게 풀었는데, 나는 STL 사용법이 익숙치 않아서 무식하게 풀이한거 같다.

얼른 STL 공부해서 더 효율적인 방법으로 다시 한번 풀어보도록 해야겠다.

내일도 열심히!

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

백준 1018번: 체스판 다시 칠하기  (0) 2020.04.13
백준 1182번: 부분수열의 합  (0) 2020.04.13
백준 14888번: 연산자 끼워넣기  (0) 2020.04.12
백준 6603번: 로또  (0) 2020.04.12
백준 7568번: 덩치  (0) 2020.04.11

+ Recent posts