본문 바로가기

알고리즘/프로그래머스

프린터

반응형




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <string>
#include <vector>
 
using namespace std;
 
int solution(vector<int> priorities, int location) {
    int answer = 0;
    int size = priorities.size();
    vector<int> temp;
    
    for(int i = 0; i < size; i++
        temp.push_back(priorities[i]);
   
    for(int i = 0; i < size; i++) {
        for(int j = i + 1; j < size; j++) {
            if(temp[i] < temp[j]) {
                temp.push_back(temp[i]);
                temp[i] = 0;
                size += 1;
                if(i == location) location += size - location - 1;
                break;
            }
        }
    }
    
    for(int i = 0; i < temp.size(); i++) {
        if(temp[i] != 0) answer++;
        if(location == i && temp[i] != 0return answer;
    }
    
}
cs



생각을 정말 많이 한 문제이다. 어떻게 큐로 풀 수 있는 문제인가 고민하다가 큐로 풀면 인덱스를 생각하지 못할것 같고 그렇다고 배열로 풀자니 어떻게 풀어야 할지 모르겠어서 시간이 많이 걸렸다. 그러다가 생각난 방법이 배열을 이용해서 우선순위에 표시가 안되는 0을 가지고 푸는 방법이다.


문제는 이해가 쉽게 된다. 간단하게 배열이 주어지면 우선 순위에 따라 먼저 우선순위가 높으면 먼저 프린트를 하는 것이다. 

이렇게 만들기 위해서 한 일이 먼저 temp라는 벡터를 하나 선언해 놓은 것이다. 여기 temp에는 현재 인자로 받아 온 priorities의 값들이 모두 저장될 것이다. 그리고나서 하는 것이 temp에 저장된 배열을 탐색해가면서 우선순위를 찾아내는 것이다. 만약 여기서 현재 인덱스에 해당하는 우선순위가 다음번에 나오는 우선순위보다 낮은 우선순위를 가졌다면 그 자리에 0을 넣고 맨 위로 push_back한다. 그리고 배열의 크기가 하나 늘어났으므로 인덱스의 범위를 하나 증가시킨다. 또한 현재 알고자하는 위치인 location이 지금 비교한 인덱스와 같다면 맨 뒤로 갔으므로 그 값을 다시 조정해준다. 이 반복을 우선순위 설정이 끝날때 까지 계속 반복해준다.


마지막으로 할 일은 현재 temp의 사이즈만큼 반복하면서 temp값이 0이 아니라면 answer의 값을 확인하고자하는 위치까지 증가시켜서 값을 구하는 것이다.

'알고리즘 > 프로그래머스' 카테고리의 다른 글

전화번호 목록  (0) 2018.10.27
2 x n 타일링  (0) 2018.10.25
H-Index  (0) 2018.10.24
쇠막대기  (0) 2018.10.22
기능개발  (0) 2018.10.20