728x90
반응형
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
|
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
// [프로그래머스 c++ V] 다리를 지나는 트럭
// 문제: 다리의 무게한도를 초과하지 않으면서 트럭이 모두 지날 수 있는 최소 시간을 구해라
// 접근: 다리를 건너는 트럭에 트럭을 추가,삭제 -> 스택,큐 -> 순서대로: 큐를 사용
// 대기트럭의 무게와 다리의 무게합이 한도내에 있으면 다리를 건너는 큐에 푸쉬
// 큐의 크기가 다리의 길이와 같다 = 트럭이 다리 끝까지 왔다
// 풀이:
// while반복문으로 걸리는 시간 ++
// 트럭이 다리끝에 도달한 경우 트럭 빼주기
// 다리의 무게를 초과하지 않으면 트럭 추가
// 대기트럭이 모두 빠졌을 때 시간 추가해주고 중단
// 주의: 다리의 무게 초과한 경우 0을 푸쉬해서 트럭을 한 칸 민다.
queue<int> q;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int answer = 0;
int truckIdx=0;
int time=0;
int sum=0;
int size = truck_weights.size();
while(1){
time++;
// 트럭이 다리끝에 도착하면 빼줌
if(q.size() == bridge_length){
sum-= q.front(); // 다리의 무게합 최신화
q.pop();
}
// 다리의 무게를 초과하지 않으면 트럭 추가
if(sum+ truck_weights[truckIdx] <= weight){
q.push(truck_weights[truckIdx]);
//cout<<truck_weights[truckIdx]<<'\n';
sum+= truck_weights[truckIdx]; // 다리에 무게 추가
truckIdx++; // 대기트럭 하나 빠짐
// 대기트럭이 모두 빠졌을 때
if(truckIdx == size){
time+=bridge_length;
break;
}
}
else{ //다리의 무게 초과하면 0을 푸쉬해서 트럭을 한 칸 민다.
q.push(0);
}
}
return answer=time;
}
|
cs |
반응형
'Algorithm_프로그래머스' 카테고리의 다른 글
[프로그래머스 c++ V] 더 맵게 (0) | 2021.07.24 |
---|---|
[프로그래머스 c++ V] 프린터 (0) | 2021.07.24 |
[프로그래머스 c++ V] 주식가격 (0) | 2021.07.22 |
[프로그래머스 c++ O] 기능개발 (0) | 2021.07.21 |
[프로그래머스 c++ O] 모의고사 (0) | 2021.06.27 |