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 |