티스토리 뷰
title: "프린터 큐(1966)"
category: 백준[Class-2]
tags: [C++, JavaScript, 백준]
date: "2021-03-27"
문제 링크
C++
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
// 문제 풀이 함수
void solution(){
int k;
cin >> k;
for(int i=0; i<k; i++){
int n, m;
cin >> n >> m;
queue<pair<int, int> > q;
vector<int> priority(n);
for(int j=0; j<n; j++){
int a;
cin >> a;
priority[j]=a;
q.push({j, a}); // {index, priority}
}
// 내림차순 정렬
stable_sort(priority.rbegin(), priority.rend());
int cnt=0;
while(!q.empty()){
int idx = q.front().first;
int prio = q.front().second;
q.pop();
if(priority[cnt] > prio)
q.push({idx, prio});
else{
cnt++; // 다음 우선 순위
if(idx==m) break; // 찾던 인덱스
}
}
cout<<cnt<<"\n";
}
}
bool exists(const char* fileName){
FILE* fp;
if((fp = fopen(fileName, "r"))){
fclose(fp);
return true;
}
return false;
}
int main() {
if(exists("stdin")){
freopen("stdin", "r", stdin);
solution();
fclose(stdin);
}
else{
solution();
}
return 0;
}
JavsScript
const fs = require("fs");
// split 조절
const input = fs.readFileSync("dev/stdin").toString().trim().split("\n");
// 문제 풀이
const k = +input[0];
const log = [];
for (let i = 1; i < k + k; i += 2) {
input[i] = input[i].split(" ");
const n = +input[i][0];
const m = +input[i][1];
const priority = input[i + 1].split(" ").map((v) => +v);
const queue = priority.map((v, i) => [i, v]);
// 내림차순 정렬
priority.sort((a, b) => b - a);
let cnt = 0;
while (queue.length > 0) {
const idx = queue[0][0];
const prio = queue[0][1];
queue.shift();
if (prio < priority[cnt]) {
queue.push([idx, prio]);
} else {
cnt++; // 다음 우선순위
if (idx === m) break; // 찾으려던 인덱스
}
}
log.push(cnt);
}
console.log(log.join("\n"));
728x90
반응형
'Baekjoon Solutions > Class-2' 카테고리의 다른 글
[백준] 소수 구하기(1929) (0) | 2021.03.30 |
---|---|
[백준] 나무 자르기(2805) (0) | 2021.03.27 |
[백준] 스택 수열(1874) (0) | 2021.03.27 |
[백준] 랜선 자르기(1654) (1) | 2021.03.26 |
[백준] 요세푸스 문제 0(11866) (0) | 2021.03.26 |
댓글