📕알고리즘 문제/📝Programmers

[프로그래머스] Level 2 : 프로세스

주으기 2024. 11. 20. 09:02
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제에서 제시하는 배열의 길이가 100 이하이다.

거기에, 매 순회마다 길이가 1씩 감소되니 완전탐색으로 풀어도 시간복잡도는 안전하다.

  • 큐에 첫 번째 원소를 뽑아서 큐에 남아있는 다른 모든 원소와 비교한다.
    • 큰 원소가 있으면 False 반환, 같거나 작은 원소밖에 없으면 True 반환
  • 현재 원소가 가장 큰 원소이면
    • 현재 원소가 실행된 순서가 정답 순서와 같으면, 현재 순서를 출력한다.
    • 정답과 같지 않으면, 큐에서 제거하고 순서를 1 추가한다.
  • 현재 원소가 가장 큰 원소가 아니면
    • 현재 원소를 큐의 맨 뒤로 보낸다.
#include <string>
#include <vector>
#include <queue>
using namespace std;

queue<pair<int, int>> q;

bool Func(const int& Input)
{
	queue<pair<int, int>> cq = q;

	while (!cq.empty())
	{
		if (Input < cq.front().first) return false;
		cq.pop();
	}

	return true;
}

int solution(vector<int> priorities, int location) {
	int answer = 1;

	for (int i = 0; i < priorities.size(); ++i)
		q.push({ priorities[i], i });

	while (!q.empty())
	{
		bool Check = Func(q.front().first);

		if (Check)
		{
			if (q.front().second == location) return answer;
			q.pop();
			answer++;
		}
		else if (!Check)
		{
			q.push({ q.front().first, q.front().second });
			q.pop();
		}
	}
	return answer;
}

 

 

 

 

 

728x90
반응형