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이 안되서 블로그에 올려논다.
전체공개로 해놓는 이유는, 내 코드를 보고 모두가 자신감을 얻었으면 하는.... 바램에...(거짓말ㅠ)
'프로그래밍 > 알고리즘' 카테고리의 다른 글
[ 프로그래머스 : 정렬 ] 가장 큰 수 (0) | 2020.11.09 |
---|---|
[ 프로그래머스 : 스택/큐 ] 기능개발 (0) | 2020.10.23 |
[Summer/Winter Coding(~2018)] 예산 - JAVA (0) | 2020.07.30 |
[2020카카오인턴십] 키패드 누르기 - JAVA (0) | 2020.07.29 |
에라토스테네스의 체를 이용한 소수 구하기 알고리즘 java (1) | 2019.10.24 |