Search

다리를 지나는 트럭

알고리즘
스택/큐
플랫폼
프로그래머스
JCF
상태
해결
생성 일시
2024/01/29 08:54
최종 편집 일시
2024/09/26 09:45

문제 설명

해결과정

Solution.java

import java.util.*; class Solution { public int solution(int bridge_length, int weight, int[] truck_weights) { // 총 소요시간 int answer = 0; // 각 트럭별 다리 진입 시간 int[] entryTime = new int [truck_weights.length]; // 각 트럭별 다리 탈출 시간 // int[] escapeTime = new int [truck_weights.length]; Map<Integer, Integer> escapeTime = new HashMap<>(); // 각 트럭별 다리 이동 시간 int[] travelTime = new int [truck_weights.length]; // travelTime의 모든 요소들 bridge_length로 초기화 travelTime = initialTravelTime(travelTime, bridge_length); // 현재 시간 int currentTime = 0; // 현재 다리 위 트럭들의 총 무게 int totalWeights = 0; // 현재 다리 위 트럭들의 대수 int numberOfTrucks = 0; // 현재 트럭의 인덱스 int index = 0; // 현재 트럭 int truck = 0; // 트럭들의 다리 건너기 시작 while(index < truck_weights.length) { // 매 반복문이 진행될 때 마다 현재 시간은 증가 currentTime++; // 다리에 진입해야 할 트럭을 한 대 가지고 온다. truck = truck_weights[index]; // 현재 트럭의 상태를 점검 다리를 지나간 트럭이 있는지 확인 // 어떻게? // 현재 시간의 나가야 하는 트럭이 있는지 확인 if(escapeTime.containsKey(currentTime)) { int i = escapeTime.get(currentTime); int escapeTruck = truck_weights[i]; totalWeights -= escapeTruck; numberOfTrucks -= 1; escapeTime.remove(currentTime); } // 다리의 무게와 차량대수를 비교하여 현재 트럭이 진입이 가능한지 확인 if(totalWeights+truck <= weight && numberOfTrucks+1 <= bridge_length) { // 현재 트럭이 다리에 진입한다. // 무게 변경 totalWeights += truck; // 대수 변경 numberOfTrucks += 1; // 트럭의 진입 시간 변경 entryTime[index] = currentTime; // 트럭의 탈출 시간, 인덱스 입력 escapeTime.put(currentTime+bridge_length , index); // 다음 트럭 대기 index++; } } answer = entryTime[truck_weights.length-1] + bridge_length; return answer; } public int[] initialTravelTime(int[] travelTime, int bridge_length) { for(int i = 0; i < travelTime.length; i++) { travelTime[i] = bridge_length; } return travelTime; } }
Java
복사