[프로그래머스] 다리를 지나는 트럭 (java)
🔗 문제링크
https://programmers.co.kr/learn/courses/30/lessons/42583
👩🏻💻 코드
import java.io.*;
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 1;
boolean[] bridge = new boolean[bridge_length]; // 다리위에 트럭이 있는지 없는지
int weight_sum = 0; // 다리위에 있는 트럭 무게 합
int idx = 1; // 대기 트럭 배열의 인덱스
Queue<Integer> queue = new LinkedList<>(); // 다리를 건너는 트럭리스트
// 첫번재 트럭 다리에 올리기
queue.add(truck_weights[0]);
bridge[bridge_length - 1] = true;
weight_sum += truck_weights[0];
while (!queue.isEmpty()) {
answer++;
// 다리 위 트럭 한칸씩 이동
if (bridge[0]) {
weight_sum -= queue.peek();
queue.poll();
}
for (int i = 0; i < bridge_length - 1; i++) {
bridge[i] = bridge[i + 1];
}
bridge[bridge_length - 1] = false;
// 대기 트럭 다리로 올리기
if (idx < truck_weights.length) {
int next = truck_weights[idx];
if (weight_sum + next <= weight) {
queue.add(next);
bridge[bridge_length - 1] = true;
weight_sum += next;
idx++;
}
}
}
return answer;
}
}
📝 정리
다리 위에 있는 트럭을 queue
에 넣고 다리 위에 트럭이 있는지 없는지 나타내는 bridge
배열을 통해 bridge[0]이 true 이면 queue
에서 제거해 줬다.
다리 위에 있는 트럭을 한 칸씩 앞으로 옮긴 후, 대기하던 트럭을 다리로 올렸다.
그리고 이 과정을 queue
가 빌 때까지 반복해 줬다.
내가 푸는 과정에서 헷갈리지 않기 위해 bridge 배열을 선언하고, 트럭들이 한 칸씩 앞으로 움직이는 방법을 사용했는데 다른 사람들의 풀이를 참고하니 다양한 방법이 있었다.
Author And Source
이 문제에 관하여([프로그래머스] 다리를 지나는 트럭 (java)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hammii/프로그래머스-다리를-지나는-트럭-java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)