Sangil's blog

https://github.com/ChoiSangIl Admin

프로그래머스 코딩테스트 다리를 지나는 트럭 자바(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으로 만들어서 처리한 부분이 인상적이였습니다. 

REPLY