일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 후니의 쉽게 쓴 시스코 네트워킹
- 수학
- 유니온 파인드
- dfs
- 플로이드-와샬
- Effective Java
- java
- 위상정렬
- 프로그래머스
- 그리디
- 백트래킹
- mst
- Network
- 투 포인터
- 백준
- BFS
- swea
- 시뮬레이션
- 동적계획법
- 스택
- 문자열
- 알고리즘
- 에라토스테네스의 체
- JUnit 5
- 완전탐색
- CS
- 세그먼트 트리
- 이분탐색
- 구현
- Kotlin
반갑습니다!
[ 프로그래머스] 다리를 지나는 트럭 본문
생각보다 시간이 좀 걸렸던 문제이다. 확실히 stack
, queue
관련 문제를 많이 안풀어봐서 풀이가 잘 생각나지 않는 것 같다.
풀이
queue
를 이용하여 1초마다 값을 push
하여 다리를 구현하였다. 이렇게 구현하면 q.size()
가 bridge_length
와 같은 경우 queue
의 맨 앞 트럭이 다리를 건넜다는 의미가 되므로 pop
해주면 된다. 다리에 올라간 트럭들의 무게가 weight
보다 작지만 새로운 트럭이 올라갈 수는 없는 경우에는 0을 push
하여 해결하였다.
다리의 길이가 2, 다리가 견딜 수 있는 무게가 10, 트럭별 무게가 [7, 4, 5, 6]인 경우를 예시로 살펴보자.
초기 상태
Queue : []
time : 0
current_weight : 0
첫번째 트럭의 무게인 7을 push
Queue : [7]
time : 1
current_weight : 7
7+4 > 10 이므로 두번째 트럭은 진입하지 못하고 대신에 0을 push
Queue : [7,0]
time : 2
current_weight : 7
queue.size()
가 bridge_length
와 같으므로 pop
해주고 두번째 트럭을 push
Queue : [0,4]
time : 3
current_weight : 4
queue.size()
가 bridge_length
와 같으므로 pop
해주고 세번째 트럭을 push
Queue : [4,5]
time : 4
current_weight : 7
queue.size()
가 bridge_length
와 같으므로 pop
해준다. 5+6 > 10 이므로 네번째 트럭은 진입하지 못하고 대신에 0을 push
Queue : [5,0]
time : 5
current_weight : 5
queue.size()
가 bridge_length
와 같으므로 pop
해주고 마지막 트럭을 push
Queue : [0,6]
time : 6
current_weight : 6
마지막 트럭이 다리 길이만큼 시간이 지나면 모든 트럭이 다리를 건넌 것이다.
따라서 마지막 트럭이 진입한 시간인 6초에 다리의 길이인 2를 더하여 8이 정답이다.
코드
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
int solution(int bridge_length, int weight, vector<int> truck_weights) {
int time = 0;
int cur_weight = 0;
int idx = 0;
queue<int> q;
while (true) {
time++;
if (q.size() == bridge_length) {
cur_weight -= q.front();
q.pop();
}
if (cur_weight + truck_weights[idx] <= weight) {
if (idx == truck_weights.size() - 1) {
time += bridge_length;
break;
}
q.push(truck_weights[idx]);
cur_weight += truck_weights[idx];
idx++;
}
else q.push(0);
}
return time;
}
'알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 문자열 압축 (0) | 2020.04.03 |
---|---|
[프로그래머스] 기능개발 (0) | 2020.04.02 |
[프로그래머스] 주식가격 (0) | 2020.04.02 |
[프로그래머스] 가장 긴 팰린드롬 (0) | 2020.04.02 |
[프로그래머스] 가장 먼 노드 (0) | 2020.04.02 |