문제링크
https://programmers.co.kr/learn/courses/30/lessons/42583
코딩테스트 연습 - 다리를 지나는 트럭
트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈
programmers.co.kr
문제풀이
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
List<Integer> done = new ArrayList<>();
Queue<Integer> trucks = new LinkedList<Integer>();
Queue<Integer> bridge = new LinkedList<Integer>();
for (int truck : truck_weights) {
trucks.add(truck);
}
// initialize queue (adding dummy data)
for (int i = 0; i < bridge_length; i++) {
bridge.add(0);
}
int answer = 0;
int sum = 0;
while (done.size() < truck_weights.length) {
// 조건 만족
if (trucks.peek() != null) {
if (sum + trucks.peek() <= weight) {
int curr = trucks.poll();
bridge.add(curr);
sum += curr;
}
}
if (bridge.size() < bridge_length) {
bridge.add(0);
}
// iteration이 끝나면 빼주기
int truck = bridge.poll();
sum -= truck;
if (truck != 0) {
done.add(truck);
}
++answer;
}
return answer;
}
}
반응형
'BE > algorithm' 카테고리의 다른 글
[LeetCode] 242. Valid Anagram (0) | 2022.12.14 |
---|---|
[LeetCode] 217. Contains Duplicate (2) | 2022.12.14 |
[프로그래머스] K번째수 - 정렬 (0) | 2021.07.18 |
[프로그래머스] 완주하지 못한 선수 - 해시 (0) | 2021.07.18 |
[프로그래머스] 모의고사 - 완전탐색 (0) | 2021.07.18 |