📕알고리즘 문제/📝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
반응형