
백준 13335번 트럭 - Java (실버 1)백준/스택 & 큐2025. 7. 30. 16:01
Table of Contents
https://www.acmicpc.net/problem/13335
✅ 문제
🔑 풀이
import java.util.*;
import java.io.*;
// 2025/7/30
// 시뮬레이션 + 큐
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken()); // 트럭 수
int w = Integer.parseInt(st.nextToken()); // 다리의 길이
int L = Integer.parseInt(st.nextToken()); // 다리의 최대하중
Queue<Integer> trucks = new LinkedList<>();
Queue<Integer> bridge = new LinkedList<>();
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
trucks.add(Integer.parseInt(st.nextToken())); // 각 트럭 무게 큐에 담기
}
for (int i = 0; i < w; i++) {
bridge.add(0); // 다리의 길이만큼 큐에 마치 무게가 0인 트럭이 올라가있게 조건 설정
}
int time = 0;
int weight = 0;
while (!bridge.isEmpty()) { // 현재 다리에 올라와 있는 트럭이 존재하지 않을 때까지
time++;
weight -= bridge.poll(); // 다리에 올라와있는 트럭이 1대씩 다리에서 내려옴
if (!trucks.isEmpty()) {
if (trucks.peek() + weight <= L) { // 트럭큐에 담긴 맨앞의 값과 현재 다리위에 올라와있는 트럭의 무게의 합이 L 보다 낮을때
weight += trucks.peek();
bridge.add(trucks.poll()); // 다리에 트럭 1대씩 올라감
} else { // 트럭큐에 트럭이 존재하지만 다리의 최대하중 때문에 다리로 못 올라가는 경우
bridge.add(0); // 0 트럭을 큐에 넣어 지연
}
}
}
System.out.println(time);
}
}
[설명]
이 문제는 큐를 활용하면 쉽게 풀 수 있다.
먼저 다리 위에 트럭이 몇개가 존재하는지를 담는 큐 bridge 를 하나 만들고, 다리를 건너기 전의 트럭을 담는 truck 큐를 하나 만들어준다.
bridge 큐가 빌때까지 반복한다. 반복문이 한번 반복될때마다 트럭이 다리 위에서 한칸씩 전진하는 구조이다.
한칸 전진할 때마다 truck 큐를 확인하며 truck 큐를 하나 꺼내 다리위에 올라갔을 때 최대하중을 넘는지 안넘는지 체크하고
넘지않는다면 bridge 큐에 넣고, 넘는다면 bridge에 0을 집어 넣는다.
'백준 > 스택 & 큐' 카테고리의 다른 글
백준 17298번 오큰수 - Java (골드 4) (3) | 2025.07.31 |
---|---|
99클럽 코테 스터디 7일차 TIL - [스택] 백준 10799번 : 쇠막대기 (0) | 2025.04.09 |
[큐] 백준 10845번 큐 - Java (0) | 2025.04.08 |
[스택] 백준 3986번 좋은단어- Java (0) | 2025.04.08 |
@킴준현 :: 차근차근 꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!