프로그래머스 코딩테스트 다리를 지나는 트럭 자바(JAVA) DEV / ALGORITHM
2020-07-25 posted by sang12
각각의 무게를 가진 트럭이 K만큼의 길이를 가지고있고 N만큼의 무게를 견딜 수 있는 다리를 건너는데 걸리는 시간을 구하는 문제입니다. 트럭은 1초마다 1만큼 이동 할 수 있습니다. (문제: https://programmers.co.kr/learn/courses/30/lessons/42583?language=java). 이미 문제 유형 자체가 스택이나 큐를 이용하는 문제여서 스포를당해버린...
링크드리스트를 이용해서 trucks과 bridge 객체를 생성했습니다. 그리고 다리의 길이만큼 이동하기위해 int배열을 이용해서 0번째에는 무게를 1번째에는 이동 할 수 있는 다리의 길이를 넣어줬습니다. 그리고 currentBridgeWeight는 다리위에 올라와있는 트럭의 무게이고, 이를 이용해서 다리에 올라 갈 수 있는 무게만 올가가게 해줬습니다. 그리고 트럭과 다리의 큐가 비어 있으면! 끝..!
import java.util.LinkedList;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int currentBridgeWeigh = 0;
LinkedList<Integer> trucks = new LinkedList<Integer>();
LinkedList<int[]> bridge = new LinkedList<int[]>();
for(int truck : truck_weights) {
trucks.add(truck);
}
int result = 1;
while(!trucks.isEmpty() || !bridge.isEmpty()) {
for(int j=0; j<bridge.size(); j++){
int[] tructCheck = bridge.get(j);
if(tructCheck[1] == 0) {
bridge.poll();
currentBridgeWeigh = currentBridgeWeigh-tructCheck[0];
}
}
if(!trucks.isEmpty()) {
int[] truck = {trucks.peek(), bridge_length};
if(currentBridgeWeigh + truck[0]<= weight) {
bridge.add(truck);
currentBridgeWeigh = currentBridgeWeigh+truck[0];
trucks.poll();
}
}
for(int j=0; j<bridge.size(); j++){
int[] tructCheck = bridge.get(j);
tructCheck[1]--;
bridge.set(j, tructCheck);
}
if(trucks.isEmpty() && bridge.isEmpty()) {
break;
}
result++;
}
return result;
}
}
하고 나서 다른사람들의 소스를 참고하니, 제가 int배열로 처리했던 부분 0번쨰에는 무게, 1에는 갈 수 있는거리를 Class Truck으로 만들어서 처리한 부분이 인상적이였습니다.
1 | |
2024-11-01 13:15:16 |
1
답글
REPLY