프로그래밍/알고리즘
[ 프로그래머스 : 스택/큐 ] 다리를 지나는 트럭
말랑공룡
2020. 10. 23. 16:06
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
/**
* https://programmers.co.kr/learn/courses/30/lessons/42583
*/
public class 다리를지나는트럭2 {
public static void main(String[] args) {
int answer = solution(2, 10, new int[]{7,4,5,6});
//int answer = solution(100, 100, new int[]{10,10,10,10,10,10,10,10,10,10});
System.out.println(answer);
}
public static int solution(int bridge_length, int weight, int[] truck_weights) {
Queue<Integer> waiting = new LinkedList<>();
Queue<Integer> bridge = new LinkedList<>();
List<Integer> complete = new ArrayList<>();
for(int i : truck_weights){
waiting.add(i);
}
for(int i = 0 ; i < bridge_length; i++){
bridge.add(null);
}
Integer truck;
int answer = 0;
while(complete.size() != truck_weights.length){
truck = waiting.peek();
if(truck == null){
answer += bridge_length;
break;
}else{
if(getBridgeWeight(bridge) + truck <= weight){
if(bridge.peek() != null){
complete.add(bridge.remove());
}else{
bridge.remove();
}
bridge.add(waiting.remove());
answer++;
}else{
while(bridge.peek() == null){
bridge.add(bridge.remove());
answer++;
};
complete.add(bridge.remove());
if(getBridgeWeight(bridge) + truck <= weight){
bridge.add(waiting.remove());
}else{
bridge.add(null);
}
answer++;
}
}
}
return answer;
}
static int getBridgeWeight(Queue<Integer> bridge){
int result = 0;
for(Integer i : bridge){
result+=(i == null ? 0 : i);
}
return result;
}
겁나 오래걸리고 겁나 드러운 코드지만
나중에 집에서 다시 한번 생각해볼건데 여기(...)서 git이 안되서 블로그에 올려논다.
전체공개로 해놓는 이유는, 내 코드를 보고 모두가 자신감을 얻었으면 하는.... 바램에...(거짓말ㅠ)