프로그래머스/lv2/42587. 프로세스

SITY·2023년 9월 15일
0

Cpp_Algorithm

목록 보기
5/43

#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;

int solution(vector<int> p, int l)
{
    vector<pair<int, bool>> v;
    for (int i = 0; i < p.size(); i++)
        i != l ? v.push_back(make_pair(p[i], false)) : v.push_back(make_pair(p[i], true));
    
    int count = 0;
    while (!v.empty())
    {
        pair<int, bool> t = v[0];
        v.erase(v.begin());
        int sign = 1;
        for (int i = 0; i < v.size(); i++)
        {
            if (t.first < v[i].first)
            {
                v.push_back(t);
                sign = 0;
                break;
            }
        }                
        if (sign)
        {
            count++;
            if (t.second)
                break;
        }       
    }
    return count;
}

location의 프로세스가 몇번째로 실행되는지 찾는 문제였는데, 인덱스가 유동적으로 움직이기 때문에 내가 찾는 원소의 인덱스가 뭔지 기억하고 있는다고 될 문제가 아니였다. 그래서 내가 찾는 원소가 맞는지 확인할 수 있도록 Vector에 pair형태로 넣어줬다.

그 후 while문을 돌며 v라는 벡터를 마치 Queue처럼 움직이게 만들었다. 임시변수 t에 Queue의 맨 앞 원소를 pop해주고, 반복문을 한번 돌며 t보다 큰 값이 있는지 체크하고, 만약 있다면 체크 변수를 false로 만들고 다시 Queue에 push후 반복문 종료.

그 후 체크 변수가 true (큰 값이 없다면) 프로세스 실행, 그리고 방금 꺼낸 프로세스가 우리가 찾는 프로세스라면 while문을 종료시키고 지금 현재 반복된 실행 순서를 나타내는 변수인 count를 return한다.

// 문제를 풀고 번뜩 생각난 함수인 *max_element를 사용했었어야 했다.. 코드 9줄을 낭비해버렸다. 분발하자

profile
·ᴗ·

1개의 댓글

comment-user-thumbnail
2023년 9월 16일

잘 보고 갑니덩

답글 달기