쌓고 쌓다

[프로그래머스] 프린터 C++ 풀이 본문

알고리즘/프로그래머스

[프로그래머스] 프린터 C++ 풀이

승민아 2022. 12. 23. 17:17

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

전체 코드

#include <string>
#include <vector>
#include <iostream>
using namespace std;

int solution(vector<int> priorities, int location) {
    int answer = 0;
    int cnt=0; // 뽑혀 나간 문서
    while(1)
    {
        bool flag=false;
        
        for(int i=1;i<priorities.size();i++)
        {
            if(priorities[0]<priorities[i]) // 더 큰 우선순위가 있다면
            {
                priorities.push_back(priorities[0]); // 맨 뒤에 맨 앞의 원소를 복사해 넣고
                priorities.erase(priorities.begin()); // 맨 앞의 원소 삭제
                if(location==0) // 목표 문서의 위치가 0번째라면 현재의 문서이다.
                    location=priorities.size()-1; // 이 문서의 위치는 맨 뒤로.
                else // 그게 아니라면 목표 문서의 위치는 앞으로 한칸 땡겨짐
                    location--;
                flag=true; // 더 큰 우선순위 문서가 있음을 알리는 flag를 true로.
                break;
            }
        }
        
        if(flag==false) // 더 큰 우선순위 문서가 존재하지 않는다면.
        {
            priorities.erase(priorities.begin()); // 바로 출력을 한다.
            cnt++; // 뽑힌 문서의 개수 + 1
            
            if(location==0) // 목표 문서가 맨 앞에 있었다면
            {
                answer=cnt; // 그것은 내가 찾던 문서이다.
                break;
            }
            else
                location--; // 그게 아니라면 목표 문서는 앞으로 한칸 땡겨짐
        }
    
    }
    return answer;
}

 

문제 풀이

코드에 주석으로 설명을 달아놨기에 간단히 설명하자면 

 

location은 현재 내가 목표로 하는 문서의 위치입니다.

 

프린터 맨앞에 있는 문서(priorities[0])의 우선순위를 기준으로

뒤에 있는 문서들의 우선순위와 비교합니다.

 

1. 우선순위가 더 큰 문서가 존재한다면

맨 앞의 문서를 맨뒤로 보낸다.

그러면 변수 location의 조정이 필요하다,왜냐하면 맨 앞의 문서를 맨뒤로 보냄으로써 상대적인 위치가 변경되기 때문이다.

이때 location이 0이라면 맨 앞의 문서가 내가 원하던 문서인데 맨 뒤로 간것이므로 목표 문서의 위치 location을 vector 사이즈 -1로하여 맨 뒤에 위치하게 한다.

location이 0이 아니라면 내가 목표하던 문서의 위치가 한칸 앞으로 당겨진다. 그래서 location-- 를 해준다.

그리고 더 큰 문서가 존재함을 알리는 flag 변수를 true로 표시한다.

 

1. 우선순위가 더 큰 문서가 존재하지 않는다면

맨 앞의 문서를 그냥 출력한다. 이때 뽑힌 문서의 개수 + 1을 해줌.

이제 이 뽑힌 문서가 내가 목표하던 문서라면 location이 현재 0일 것이다.

그게 아니라면 맨 앞의 문서가 뽑혀 나갔으니 내 목표 문서 location의 위치는 한 칸 앞으로 당겨진다.

 

Comments