https://www.acmicpc.net/problem/1966
1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
접근 방법 / 풀이
현재 문서보다 중요도가 높은 문서의 유무의 따라 해야하는 행동이 다르므로, 현재 문서보다 중요도가 높은 문서의 유무를 판단하기 위해imp 1차원 배열을 만들어 처리했다. 왜냐하면
구체적으로 현재 문서보다 중요도가 높은 문서의 유무를 살필 때에는,
입력을 받을 때 {중요도, 인덱스} 쌍으로 큐에 넣어놓고, 큐의 앞에서 하나씩 꺼내면서 필요한 행동을 하면 된다.
이런 행동들을 반복하다가
시간 복잡도
최악의 경우,
인쇄할 문서가 매번 큐의 가장 뒤에 있고,
중요도도 매번 9번 검사해야 하고,
가정해보면, 하나의 테스트케이스 당
코드
#include <bits/stdc++.h>
#define ll long long int
#define pll pair<ll, ll>
#define pii pair<int, int>
#define X first
#define Y second
using namespace std;
int dx[]={-1, 1, 0, 0};
int dy[]={0, 0, -1, 1};
void solve()
{
int imp[10]={0};
queue<pii> q;
int n, m; cin>>n>>m;
for(int i=0;i<n;i++)
{
int x; cin>>x;
q.push({x, i});
imp[x]++;
}
int ans=0;
while(1)
{
pii now=q.front();
q.pop();
bool flag=false;
for(int i=now.X+1;i<=9;i++)
if(imp[i]>0)
{
flag=true;
break;
}
if(flag) q.push(now);
else
{
imp[now.X]--;
ans++;
if(now.Y==m)
{
cout<<ans<<'\n';
break;
}
}
}
}
int main()
{
ios::sync_with_stdio(0); cin.tie(0);
int tc=1; cin>>tc;
while(tc--) solve();
return 0;
}
테스트케이스 형식의 문제이므로 큐와 imp배열 초기화 하는 것을 까먹지 말고 실수하지 말자. 처음에 초기화를 안해줘서 값이 이상하게 나왔었다.
'PS' 카테고리의 다른 글
PS 환경 설정 글 모음 (0) | 2022.07.23 |
---|---|
[BOJ] 2785번: 체인 (1) | 2022.06.23 |
[BOJ] 5525번: IOIOI (0) | 2022.06.15 |
[BOJ] 2981: 검문 (1) | 2022.06.08 |
[BOJ] 1561번: 놀이공원 (0) | 2022.06.07 |