짱아의 개발 기록장

프로그래머스. 다리를 지나는 트럭(c++) / 큐(queue) 본문

Algorithm/Programmers

프로그래머스. 다리를 지나는 트럭(c++) / 큐(queue)

jungahshin 2021. 1. 7. 23:18
반응형

맨 처음 예전에 이 문제를 풀었을 때에는 큐로 풀어야 한다는 생각을 정말 1도 못했다가...

오랜만에 문제를 다시 푸니까 여지 없이 큐로 풀어야겠다는 생각이 바로 들었다!

 

[메인 로직]

큐에 해당  트럭의 무게를 계속 넣어주는데, 만약 다리에 있는 트럭들의 무게의 합이 버틸 수 있는 무게를 넘어서게 되면

트럭을 넣어주지 않고 -1의 의미 없는 값을 넣어주어서 큐가 비어있지 않도록 해주었다.

그리고 최종적으로 트럭을 가리키는 idx가 truck_weights벡터의 크기를 넘어서면 break하도록 했다.

 

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
32
33
34
35
36
37
38
#include <string>
#include <vector>
#include <queue>
#include <iostream>
 
using namespace std;
 
int solution(int bridge_length, int weight, vector<int> truck_weights) {
    int answer = 0;
    queue<int> on_bridge;
    int total_weight = 0;
    int i = 0;
    
    while(1){
        answer++;
        // 이미 다리 위에 있는 트력을 뺀다.
        if(on_bridge.size()==bridge_length){å
            if(on_bridge.front()!=-1){
                total_weight -= on_bridge.front();
            }
            on_bridge.pop();
        }
        // 대기 트럭 중 하나를 넣는다.
        if((total_weight+truck_weights[i])>weight){
            on_bridge.push(-1);
        }else{
            on_bridge.push(truck_weights[i]);
            total_weight += truck_weights[i];
            i++;
            if(i>=truck_weights.size()){
                answer += bridge_length;
                break;
            }
        }
    }
    
    return answer;
}
cs
반응형
Comments