Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 분할 정복
- 비트마스크
- 이분 탐색
- 빠른 입출력
- 세그먼트 트리
- dfs
- 재귀
- Knapsack
- 스택
- BFS
- 순열
- 백트래킹
- 문자열
- 크루스칼
- 우선순위 큐
- 클래스
- lis
- 중복 순열
- BeautifulSoup
- MST
- 완전 탐색
- 시뮬레이션
- 피보나치 수
- SSAFY
- 그리디
- 큐
- 링크드리스트
- 조합
- 메모리풀
- DP
Archives
- Today
- Total
작심 24/7
[백준] 1966번 프린터 큐 본문
1966번: 프린터 큐
문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료��
www.acmicpc.net
현재 문서의 중요도가 가장 클 경우에만 인쇄될 수 있는 조건이다.
1. M위치에 있는 문서가 몇 번째로 인쇄되었는지를 출력해야 하므로
큐에 pair로 중요도와 인덱스를 넣어준다.
2. 현재 문서의 중요도가 가장 큰지 판단해 주기 위해
중요도 배열을 따로 만들어 내림차순으로 정렬해준다.
3. 인쇄될 때마다 카운트 해주고 인쇄되는 문서가 M위치에 있을 때 카운트를 출력한다.
#include <iostream>
#include <queue>
#include <algorithm>
#include <functional>
using namespace std;
int main() {
int T;
cin >> T;
for (int t = 0; t < T; t++) {
queue < pair <int, int > > q;
int N, M, temp, Max[101] = { 0 };
cin >> N >> M;
for (int i = 0; i < N; i++) {
cin >> temp;
Max[i] = temp;
q.push(pair<int, int>(temp, i)); //중요도와 그 위치를 큐에 넣어줌
}
sort(Max, Max + N, greater<int>());
int temp1 = 0, temp2 = 0, cnt = 1, MAX = 0;
while (1) {
if (q.front().first < Max[MAX]) { //현재 문서가 가장 높은 중요도가 아닐 때 맨 뒤로 보낸다
temp1 = q.front().first;
temp2 = q.front().second;
q.pop();
q.push(pair<int, int>(temp1, temp2));
}
else { //현재 문서가 가장 높은 중요도일 때 인쇄
if (q.front().second == M) break;
else {
MAX++;
q.pop();
cnt++;
}
}
}
cout << cnt << "\n";
}
return 0;
}
'백준' 카테고리의 다른 글
[백준] 5430번 AC (0) | 2020.06.04 |
---|---|
[백준] 3078번 좋은 친구 (0) | 2020.06.03 |
[백준] 2156번 포도주 시식 (0) | 2020.05.30 |
[백준] 10844번 쉬운 계단 수 (0) | 2020.05.29 |
[백준] 1463번 1로 만들기 (C++, JAVA) (0) | 2020.05.28 |
Comments