-
[알고리즘] 프로그래머스 다리를 지나는 트럭 Java(자바)코딩/알고리즘 2021. 12. 30. 13:27
- 문제
https://programmers.co.kr/learn/courses/30/lessons/42583
코딩테스트 연습 - 다리를 지나는 트럭
트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈
programmers.co.kr
- 코드 설명
처음엔 트럭별로 시간을 관리하려고 했는데 시간 초과
이 후 다른 분이 올려놓은 코드를 보고 문제를 해결했다. 아직 많이 부족하다.
https://fbtmdwhd33.tistory.com/220
[프로그래머스,Level 2] 다리를 지나는 트럭 (JAVA 구현)
- 첫 풀이 처음에는 2차원 배열을 활용해 각 트럭이 통과한 시간을 별도로 저장해 모든 처리과정 후, 각 트럭이 다리를 건너는데 걸린 시간을 모두 더하는 방식으로 풀이하고자 하였다. 그러나
fbtmdwhd33.tistory.com
import java.util.*; class Solution { public int solution(int bridge_length, int weight, int[] truck_weights) { int answer = 0; int weight_sum = 0; int len = truck_weights.length; int index = 0; Queue<Integer> on_bridge = new LinkedList<>(); //모든차량이 다리위에 올라가면 while문 종료 while(index < len){ //다리 위에 트럭이 다 차면 빼준다. if(on_bridge.size() == bridge_length){ weight_sum -= on_bridge.poll(); } //다리에 트럭이 올라갈 공간이 있지만 무게의 합 때문에 올라가지 못할 경우 else if(weight_sum + truck_weights[index] > weight){ on_bridge.offer(0); answer++; } //다리에 트럭을 올린다. else{ on_bridge.offer(truck_weights[index]); weight_sum += truck_weights[index++]; answer++; } } answer += bridge_length; return answer; } }
내가 생각하지 못한 부분은 다리의 하중을 초과하게 될 경우 트럭이 올라가지 못 할 때이다.
이 경우 해당 코드에서 큐에 0을 넣어서 시간과 큐 사이즈를 관리했다.
아마 답을 보지 못했으면 이런 풀이 방식을 생각하지 못했을듯
이 부분을 이해하니 흐름이 명확해지고 코드를 짤 수 있었다.
마지막 결과 값에 다리의 크기를 더해주는 이유는
마지막 트럭이 올라가는 순간 while문에서 종료가 되기때문에
해당 트럭이 나가기 위해 필요한 시간을 더해준 것이다.
- 결과
'코딩 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 점프와 순간이동 Java(자바) (0) 2022.01.02 [알고리즘] 프로그래머스 디스크 컨트롤러 Java(자바) (1) 2022.01.01 [알고리즘] 프로그래머스 다단계 칫솔 판매 Java(자바) (1) 2021.11.25 [알고리즘] 백준 다리만들기 2146번 JAVA(자바) (0) 2021.11.04 [알고리즘] 프로그래머스 베스트앨범 JAVA(자바) (1) 2021.10.29