프로세스 / deque 활용

2025. 3. 10. 09:53·공부/Code Cata

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

 

문제에서 제시한 프로세스 그대로 구현하려고 생각했다.

queue의 앞 요소를 꺼내와 현재 대기중인 프로세스 중, 우선순위가 더 높은 프로세스가 있다면 다시 뒤에다가 넣어야 했는데 앞과 뒤의 삽입/삭제가 빈번하다면 O(1)의 속도를 가지고 있는 deque를 사용하는게 효율적이라고 판단했다.

그리고 우선순위가 더 높은 프로세스가 있는지 확인하려면 두 가지 방법이 있다.

첫 번째로는 algorithm 헤더의 max_element를 사용하여 현재 priorites 배열의 max 값보다 queue의 top 요소가 작은지 큰지를 비교하고 크거나 같다면 max 값을 0으로 바꿔 갱신하는 방법이 있는데, 매 루프마다 이 값을 연산해서 확인하는 것은 시간 복잡도 면에서 비효율적이라고 생각했다.

두 번째 방법은 priority_queue, max heap을 사용해 최대 값을 정렬해놓고 바로바로 지우는 것이다. 이 방법이 메모리는 더 사용할 수 있지만 시간 복잡도 면에서 더 효율적이라고 판단해 두 번째 방법으로 구현하였다.

 

 

✅ 구현 코드

#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(vector<int> priorities, int location)
{
	// 앞과 뒤의 삽입/삭제 효율을 위해 deque 선언
	deque<pair<int, int>> dq;
    // 최대 값 빠른 비교를 위해 max heap 선언
	priority_queue<int> max_heap;
    
    // 초기화 작업
	for (int i = 0; i < priorities.size(); i++)
	{
		dq.push_back({ i, priorities[i] });
		max_heap.push(priorities[i]);
	}
	
	int answer = 0;
	while (!dq.empty())
	{
		auto temp = dq.front();
		dq.pop_front();
		
        // 현재 최대 값 보다 작으면 deque에 뒤에 삽입
		if (temp.second < max_heap.top())
		{
			dq.push_back(temp);
		}
        // 현재 최대 값과 같거나 작다면 answer(프로세스 실행 순서) 증가 및 최대 값 갱신
        // 만약 현재 인덱스가 location과 같다면 현재의 answer 값 return
		else
		{
			answer++;
			max_heap.pop();
			
			if (temp.first == location)
			{
				return answer;
			}
		}
	}
	
	return -1;
}

'공부 > Code Cata' 카테고리의 다른 글

사전에서 몇 번째 단어인지 구하기 / 브루트 포스  (0) 2025.03.13
피로도 / 브루트 포스 기법(순열)  (1) 2025.03.11
기능 개발 / queue 사용  (0) 2025.02.18
의상 / 곱의 법칙(조합론)  (0) 2025.02.17
할인 행사  (0) 2025.02.13
'공부/Code Cata' 카테고리의 다른 글
  • 사전에서 몇 번째 단어인지 구하기 / 브루트 포스
  • 피로도 / 브루트 포스 기법(순열)
  • 기능 개발 / queue 사용
  • 의상 / 곱의 법칙(조합론)
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151)
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16)
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    프로세스 / deque 활용
    상단으로

    티스토리툴바