GitHubSeob
C++ / 프로그래머스 / 프린터 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
문제풀이
deque와 pair를 이용해서 풀었다.
deque는 priorities와 몇 번째 인덱스인지 값을 넣어준다. deque({priorities, idx})
value라는 벡터를 만들어 오름차순으로 정렬하여 모든 작업의 중요도를 저장하도록 한다.
count는 몇 번째 작업인지, value_f는 deque.front().first의 값을, value_s는 second의 값을 저장한다.
value_cnt는 현재 가장 높은 중요도(*max_element)를 나타내기 위한 변수다.
print가 빌 때까지 while문을 이용해 아래의 작동을 반복한다.
print의 맨 앞이 가장 높은 중요도를 가지고 있는지를 확인한다.
맞다면 location값과 second값을 비교해서 찾는 작업인지를 확인한다. 맞다면 count를 return 한다.
아니라면 front.pop을 하여 해당 작업을 한다.
가장 높은 중요도가 아니라면 맨 앞에 deque의 맨 앞에 있는 값들을 빼서 맨 뒤로 옮긴다(front.pop 하고 push_back)
코드
#include <string>
#include <vector>
#include <deque>
#include <algorithm>
using namespace std;
int solution(vector<int> priorities, int location) {
deque<pair<int, int>>print;
int idx(0);
vector<int>value(priorities.size(), 0);
for (idx = 0; idx < priorities.size(); ++idx) {
print.push_back({ priorities[idx], idx });
value[idx] = priorities[idx];
}
sort(value.begin(), value.end(), greater<>());
int count(1);
int value_f(0);
int value_s(0);
int value_cnt(0);
while (!print.empty()) {
if (print.front().first == value[value_cnt]) {
if (print.front().second == location)
return count;
print.pop_front();
value_cnt++;
count++;
}
else {
value_f = print.front().first;
value_s = print.front().second;
print.push_back({ value_f, value_s });
print.pop_front();
}
}
}
'Programmers > Level 2' 카테고리의 다른 글
C++ / 프로그래머스 / 오픈채팅방 (0) | 2022.04.13 |
---|---|
C++ / 프로그래머스 / 가장 큰 수 (0) | 2021.11.12 |
C++ / 프로그래머스 / 주식가격 (0) | 2021.11.12 |
C++ / 프로그래머스 / 전화번호 목록 (0) | 2021.11.08 |
C++ / 프로그래머스 / 타겟 넘버 (0) | 2021.11.08 |