JAVA/Algorithm

[프로그래머스/java] 다리를 지나는 트럭 (큐) (+ 주석 설명)

nang. 2020. 12. 26. 22:30
반응형
SMALL

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

 

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

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

programmers.co.kr

 

  • 큐 관련 함수 설명 참고

https://conanglog.tistory.com/217

 

[JAVA] Queue 관련 함수 (+ 함수 차이점)

Queue 선언 Queue queue = new LinkedList<>(); // Integer 형 선언 Queue에 값 추가 1. queue.add(1); 2. queue.offer(2); add() 값 추가에 성공하면 true 반환 큐에 여유 공간이 없어서 추가에 실패하면 Illegal..

conanglog.tistory.com

 

 

 

import java.util.*;

class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0; // 걸리는 시간
        
        Queue<Integer> queue = new LinkedList<>();
        int totalTruck = 0;
        
        for(int w : truck_weights) { // 모든 트럭에 대해
            while(true) {
                if(queue.isEmpty()) { // 큐가 비어있으면 (트럭이 무조건 다리에 진입 가능하므로)
                    queue.offer(w); // 큐에 맨 앞 트럭을 넣는다 (offer - 추가 실패 시 false 반환)
                    totalTruck += w; // 총 트럭무게 값에 현재 트럭 무게를 더한다
                    answer++; // 걸리는 시간 1 증가 (트럭이 진입했기 때문에 시간이 흘러가야 함)
                    break;
                } else if(queue.size() == bridge_length) { // 큐 사이즈랑 다리 전체 길이가 같아지면 (현재 트럭이 다리를 다 지났다는 의미 + 큐가 꽉참)
                    // 다 지났으니까 총 트럭무게 값에서 그 트럭 값을 빼줘야 함
                    totalTruck -= queue.poll(); // 큐에서 트럭을 꺼내서 최대 무게에서 빼준다
                } else { // 트럭이 다리 위에 있지만 큐가 가득 차 있지 않은 상태
                    if(totalTruck + w > weight) { // 큐가 비어있지않고 다리의 최대 무게를 초과하면 새로운 트럭은 진입할 수 없다는 의미
                        queue.offer(0); // 큐에 0을 넣는다 (트럭이 진입안했음을 표시)
                        answer++; // 걸리는 시간 1 증가 (다리 위 트럭들이 지나는 시간은 흘러감)
                    } else { // 큐가 비어있지않고 다리가 무게를 견딜 수 있다면 새로운 트럭이 진입할 수 있다는 의미
                        queue.offer(w); // 큐에 현재 트럭을 넣는다
                        totalTruck += w; // 총 트럭무게 값에 현재 트럭을 더한다
                        answer++; // 걸리는 시간 1 증가
                        break;
                    }
                }
            }
        }
        
        return answer + bridge_length;
    }
}
반응형
LIST