본문 바로가기
Algorithm/Programmers

[프로그래머스(programmers)] (Lv2) 다리를 지나는 트럭

by 광진구뚝배기 2021. 5. 18.

 

알고리즘 문제 풀이 / 프로그래머스 (programmers)  -  다리를 지나는 트럭

 

 

문제 링크

https://programmers.co.kr/learn/courses/30/lessons/42583

 

코딩테스트 연습 - 다리를 지나는 트럭

트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이

programmers.co.kr

 

문제 풀이

 

public static int solution(int bridge_length, int weight, int[] truck_weights) {
	int answer = 1;

	Queue<Integer> wait = new LinkedList<>();
	Queue<Integer> current = new LinkedList<>();
	Queue<Integer> end = new LinkedList<>();
	int time[] = new int[truck_weights.length];
	for(int i = 0; i < truck_weights.length; i++) 
		wait.add(truck_weights[i]);

	int count = wait.size();
	int num = wait.poll();
	int start = 0;
		
	while(end.size() < count) {
		if(num != 0 && sum(current, num) <= weight) {
			current.add(num);
			num = wait.size() == 0 ? 0 : wait.poll();
		}

		for(int i = start; i < start + current.size(); i++) 
			time[i]++;
			
		if(time[start] == bridge_length) {
			end.add(current.poll());
			start++;
		}
		answer++;
	}

	return answer;
}

public static int sum(Queue c, int num) {
	int sum = num;
	int size = c.size();
	if(size != 0){
		for(int i = 0; i < size; i++) {
			sum += (int) c.peek();
			c.add(c.poll());
		}
	}
	return sum;
}

- 대기중인 트럭들은 wait, 다리에 있는 트럭들은 current,

각 트럭마다 time의 시간을 부여해서 문제에서 주어진 bridge_length이 지난 트럭들은 end에 넣어줬다.

- sum 함수를 만들어 현재 다리위에 있는 트럭의 무게의 합들을 따로 구했다.

- end 의 사이즈가 문제에서 주어진 트럭들의 총 개수와 같다면 로직을 종료했다. 

- 전부 빠져나왔을 때 1초를 치므로 첫 시작 answer 에 1을 미리 더해줬다.

 

반응형

댓글