본문 바로가기
CodingTest/Programmers

[Programmers] 다리를 지나는 트럭

by 창브로 2025. 4. 10.

[문제 링크]

https://school.programmers.co.kr/learn/courses/30/lessons/42583?language=java

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[코드]

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        // 현재 다리위에 올라가있는 트럭 무게 합산
        int sum = 0;
        
        // 총 걸린 시간 (답)
        int time = 0;
        Queue<Integer> queue = new LinkedList<>();
        
        for(int truckWeight : truck_weights) {
            while(true) {
                // 다리에 트럭이 없을때
                if(queue.isEmpty()) {
                    // 트럭을 올려줌
                    queue.add(truckWeight);
                    time++;
                    sum += truckWeight;
                    break;
                    
                    // queue의 크기가 다리 길이랑 같다는 뜻은
                    // 다리가 꽉 찼다는 뜻
                } else if(queue.size() == bridge_length) {
                    // 젤 앞의 트럭을 빼주고 다시 while문으로 진입
                    sum -= queue.poll();
                } else {
                    // 현재 올라가 있는 트럭들의 무게 + 올라갈 트럭의 무게가
                    // 올라갈 수 있는 무게의 크기보다 작거나 같으면 트럭을 올림
                    if(sum + truckWeight <= weight) {
                        queue.add(truckWeight);
                        sum += truckWeight;
                        time++;
                        break;
                    } else {
                        queue.add(0);
                        time++;
                    }
                }
            }
        }
        
        // 마지막 트럭에서 반복문이 종료
        // 마지막 다리 길이만큼 결국 지나야하기 때문에
         return time + bridge_length;
    }
}

[회고]

아무리 고민을 해도 답이 보이지 않아 풀이 방법을 보고 구현했습니다.

while문 안에 break를 넣는 곳이 너무 헷갈렸는데 트럭이 들어간 분기에만 break를 하여

다음 for문으로 넘어가 다음 트럭을 바라보고 있다고 생각하면 조금 더 이해가 잘 되는 것 같았습니다.

어려웠습니다.

 

 

 

 

질문과 피드백은 언제나 환영입니다.

감사합니다.

'CodingTest > Programmers' 카테고리의 다른 글

[Programmers] 최소직사각형  (0) 2025.04.12
[Programmers] 주식가격  (0) 2025.04.12
[Programmers] 프로세스  (0) 2025.04.07
[Programmers] 올바른 괄호  (1) 2025.04.03
[Programmers] 기능개발  (0) 2025.04.03