Programmers_Stack/Queue03 - 다리를 지나는 트럭
프로그래머스 -스택/큐 - 다리를 지나는 트럭 문제 입니다.
1. 문제
https://programmers.co.kr/learn/courses/30/parts/12077
2. 분류 및 난이도
Programmers 문제입니다.
스택 큐 Level 2 문제 입니다.
3. 생각한 것들(문제 접근 방법)
- 처음에는 들어갈 수 있는 최대한을 큐에 다 넣고 시간을 증가시켰는데 틀렸다고 나왔습니다.
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
다리를 지나가는 트럭
#include <string>
#include <vector>
#include <queue>
#include<algorithm>
#include<iostream>
using namespace std;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int answer = 0;
queue<pair<int, int>> truckQ;
int index = 0;
while (index < truck_weights.size() || !truckQ.empty())
{
while (weight >= truck_weights[index] && index < truck_weights.size())
{
truckQ.push(make_pair(truck_weights[index],++answer));
weight -= truck_weights[index];
++index;
}
int tweights = truckQ.front().first;
int time = truckQ.front().second;
weight += tweights;
answer = (time + bridge_length-1);
cout << answer << " " << index << " " << time <<tweights<< '\n';
truckQ.pop();
}
return answer+1;
}
- 이유는 설명하기 어려운데.. q에서 나온 트럭의 시간과 위의 while문에서 한번에 집어넣는 지점에서 겹치는 지점이 있었습니다.
- 예를 들어서 3초에 트럭이 도착해서 4초에 넣어야하는데 3초 지점에서 while문이 루프를 돌면서 이미 4초에 무언가 넣어서 겹쳤다는 의미..입니다.
- 고치려고 애를 많이 썼는데, 그냥 단순하게 시간을 하나하나 증가시켜서 꼬임을 풀었습니다.
4. 접근 방법을 적용한 코드
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
#include <string>
#include <vector>
#include <queue>
#include<algorithm>
#include<iostream>
using namespace std;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int answer = 1;
queue<pair<int, int>> truckQ;
int index = 0;
while (index < truck_weights.size() || !truckQ.empty())
{
if(weight >= truck_weights[index] && index < truck_weights.size())
{
truckQ.push(make_pair(truck_weights[index],answer));
weight -= truck_weights[index];
++index;
}
int tweights = truckQ.front().first;
int time = truckQ.front().second;
int temp = (time + bridge_length - 1);
//간단하게 트럭이 도착했으면 pop을 합니다.
if (temp == answer)
{
weight += tweights;
truckQ.pop();
}
//cout << answer << " " << index << " " << time <<" "<<tweights<< '\n';
//시간이 지난다는 의미로 ++answer..
++answer;
}
return answer;
}
5. 결과
This post is licensed under CC BY 4.0 by the author.