728x90
    
    
  

max_element를 이용한 풀이
max_element는 algorithm 헤더에 있는 함수다. 큐에는 사용할 수 없고, 배열에 사용할 수 있다.
형태 : *max_element(v.begin(), b.end())
int solution(vector<int> priorities, int location) {
	int answer = 0;
	queue<int> waiting;		//인덱스 큐
	for (int i = 0; i < priorities.size(); i++) {
		waiting.push(i);
	}
	int max_value = *max_element(priorities.begin(), priorities.end());
	while (!waiting.empty()) {
		int cur_index = waiting.front();
		waiting.pop();
		//맨 앞에 애 우선순위가 제일 높으면
		if (max_value == priorities[cur_index]) {
			answer++;
			priorities[cur_index] = 0;
			max_value = *max_element(priorities.begin(), priorities.end());
			if (location == cur_index) {
				return answer;
			}
		}
		else {
			waiting.push(cur_index);
		}
	}
}
location은 요청한 문서의 인덱스다.
우선순위를 담고 있는 벡터인 priorities의 인덱스를 담는 큐(waiting)를 만든다.
cur_index = 인덱스 큐.front() 로 인덱스를 돌린다.
max_value = *max_element(priorities.begin(), priorities.end())로 우선순위 벡터의 최대값을 담고,
max_value == priorities[cur_index] 면 프린트하므로
answer를 증가시키고, 프린트한 우선순위 벡터 값을 최소로 낮춘 후 max_value를 갱신한다.
우선순위 큐와 pair를 이용한 풀이
int solution(vector<int> priorities, int location) {
	int answer = 0;
	priority_queue<int> prior;
	queue<pair<int, int>> waiting;
	for (int i = 0; i < priorities.size(); i++) {
		prior.push(priorities[i]);
		waiting.push(make_pair(i, priorities[i]));
	}
	while (!waiting.empty()) {
		int index = waiting.front().first;
		int value = waiting.front().second;
		waiting.pop();
		//지금 게 우선순위가 제일 높으면
		if(prior.top() == value) {
			prior.pop();
			answer++;
                //요청한 문서와 인덱스와 같으면
			if (index == location) {
				return answer;
			}
		}
                //아니면 뒤로 돌려보내기
		else {
			waiting.push(make_pair(index, value));
		}
	}
}
우선순위의 최대값을 스택처럼 top()으로 뽑을 수 있는 우선순위 큐 prior를 만든다.
인덱스와 우선순위 값을 페어로 가지는 큐 waiting을 만든다.
최대값을 prior.top()으로 뽑아서 waiting 큐 맨앞의 우선순위값과 비교한다.
최대면 answer++를 하고 최대값 큐를 pop 해서 최대값을 갱신한다.
이 때 프린트한게 요청한 문서의 인덱스면 리턴한다.

'[C_C++]코딩테스트 연습 > [프로그래머스] level 2' 카테고리의 다른 글
| [프로그래머스] 기능개발 - C++ 스택&큐 (0) | 2021.10.17 | 
|---|---|
| [C++] 프로그래머스 hash 2 - 위장 (0) | 2021.10.17 | 
| [C++] 프로그래머스 hash 2 - 전화번호 목록 (0) | 2021.10.17 | 
| [C++] 프로그래머스 hash 1- 완주하지 못한 선수 (vector만 이용 / 해시 이용) (0) | 2021.06.14 | 
![[프로그래머스] 프린터 (pair, priority queue) - C++ 스택&큐](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcQcUSV%2FbtricELUzvB%2FAAAAAAAAAAAAAAAAAAAAAIFegHolesjJ1Q6fAL1oneg2gnACufVMIY-TNeZ-1jEz%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1761922799%26allow_ip%3D%26allow_referer%3D%26signature%3DPaIgqlZyL1OG0kkSlMgONEl5IIk%253D)