https://programmers.co.kr/learn/courses/30/lessons/42583
코딩테스트 연습 - 다리를 지나는 트럭
트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이��
programmers.co.kr
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#include <string>
#include <vector>
#include <queue>
using namespace std;
//트럭 구조체
struct Truck
{
//이동거리, 무게
int moveDistance;
int weight;
};
int solution(int bridge_length, int weight, vector<int> truck_weights) {
//지난 시간
int time = 1;
//현재 다리의 무게
int bridge_weight = 0;
//트럭의 인덱스
int idx = 0;
//트럭 구조체
Truck sTruck;
//다리를 지나고 있는 트럭들
deque<Truck> crossing;
//다리를 지나간 트럭들
deque<Truck> passed;
while (1)
{
//현재 다리의 무게 + 올라갈 트럭의 무게 <= 다리의 무게 한계치 일 경우 트럭이 올라간다.
if (bridge_weight + truck_weights[idx] <= weight && truck_weights[idx] != NULL)
{
//현재 다리의 무게에 트럭의 무게를 더해준다.
bridge_weight += truck_weights[idx];
//구조체에 트럭의 무게를 넣고
sTruck.weight = truck_weights[idx];
//이동거리를 초기화 한 후
sTruck.moveDistance = 0;
//crossing 디큐(다리를 지나고 있는 트럭들)에 푸쉬 백 한다.
crossing.push_back(sTruck);
//트럭의 인덱스를 ++시켜 다음 트럭이 들어올 수 있게 한다.
idx++;
}
//다리를 지난 트럭들이 있을 경우 (예외처리)
if (!crossing.empty())
{
for (int i = 0; i < crossing.size(); i++)
{
//다리를 지나고 있는 트럭의 이동 거리를 ++
crossing[i].moveDistance++;
//이동 거리가 다리의 길이와 같을 경우
if (crossing[i].moveDistance == bridge_length)
{
//passed 디큐(다리를 지나간 트럭들)에 트럭을 넣는다.
passed.push_back(crossing[i]);
//현재 다리의 무게에서 지나간 트럭의 무게를 빼준다.
bridge_weight -= crossing[i].weight;
//다리를 지나고 있는 crossing 디큐에서 지나간 트럭을 삭제한다.
crossing.pop_front();
//다시 첫번째 트럭을 검사할 수 있게 i를 --해준다.
i--; continue;
}
}
}
time++;
//다리를 지나간 트럭의 수 == 트럭의 총 개수 일 경우 while문을 빠져나온다.
if (passed.size() == truck_weights.size())break;
}
return time;
}
|
deque를 처음 사용하여 문제를 풀었다.
deque 는 index로 접근이 가능하면서도 pop_front, pop_back을 사용 가능하다.
장,단점을 숙지한 후 사용하면 편리할 것 같다.
Deque 링크
'프로그래머스 - 내 풀이 > 프로그래머스 Lv2' 카테고리의 다른 글
프로그래머스 / 연습문제 / 124 나라의 숫자 (0) | 2020.06.17 |
---|---|
프로그래머스 / 스택,큐 / 탑 (0) | 2020.06.16 |
프로그래머스 / 스택,큐 / 쇠막대기 (0) | 2020.06.12 |
프로그래머스 / 스택,큐 / 기능 개발 (0) | 2020.06.11 |
프로그래머스 / summer/winter coding(~2018) / 스킬트리 (0) | 2020.05.11 |