본문 바로가기
알고리즘/프로그래머스

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

by hxxyeoniii 2024. 10. 21.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 풀이

import java.util.LinkedList;
import java.util.Queue;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
			Queue<Integer> q = new LinkedList<>();

			int time = 0;
			int sum = 0;

			for (int i = 0; i < truck_weights.length; i++) {
				while (true) {
					if(q.isEmpty()) {
						q.offer(truck_weights[i]);
						time++;
						sum += truck_weights[i];
						break;
					} else if(q.size() == bridge_length) {
						// 트럭이 다리에 진입할 수 없다면 : 다리가 꽉 참
						sum -= q.poll();
						time++;
					} else {
						// 트럭이 다리에 진입할 수 있다면
						if(q.size() <= bridge_length && sum + truck_weights[i] <= weight) {
							q.offer(truck_weights[i]);
							time++;
							sum += truck_weights[i];
                            break;
						}
                        else {
							// 트럭이 다리에 진입할 수 없다면 : 무게 초과
							q.offer(0);
							time++;
                            break;
						}
					}
				}
			}
            // 마지막으로 다리에 진입한 트럭의 경우 다리를 건너지 않은 채 for문이 종료되므로 다리의 길이를 더해줌
			return time + bridge_length;
		}
}