문제
https://www.acmicpc.net/problem/13335
풀이
큐를 이용한 구현으로 문제를 해결했습니다.
while문을 돌며 queue에 어떤 값을 집어 넣을지에 대한 조건을 정의합니다.
만약, 다음 차례의 트럭의 무게와 현재 다리에 있는 트럭 무게가 최대 허용 무게보다 작다면, queue에 다음 트럭을 넣고 아니라면 queue에 0을 넣어줍니다.
그리고 매번 큐의 사이즈를 체크하여 큐의 크기 다리 길이와 같으면 queue에서 poll해줍니다.
큐에 값을 add, poll 할 때에는 현재 다리의 트럭 무게를 업데이트해주었습니다.
아래는 소스코드입니다.
소스코드
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner;
public class B13335_트럭 {
static int N, Length, maxWeight;
static int[] trucks;
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
input();
getMinTime();
}
static void getMinTime(){
Queue<Integer> queue = new ArrayDeque<>();
int time = 1;
int idx = 0;
int totalWeight = 0;
queue.add(trucks[idx]);
totalWeight += trucks[idx];
time++;
int cnt = 0;
while(true){
if(queue.size()>=Length) {
int out = queue.poll();
totalWeight-=out;
if(out != 0) cnt++;
if(cnt == N) break;
}
if(idx+1<N&&trucks[idx+1]+totalWeight<=maxWeight){
idx++;
queue.add(trucks[idx]);
totalWeight+=trucks[idx];
}
else queue.add(0);
time++;
}
System.out.println(time);
}
static void input(){
N = sc.nextInt();
Length = sc.nextInt();
maxWeight = sc.nextInt();
trucks = new int[N];
for(int i = 0 ;i<N;i++){
trucks[i] = sc.nextInt();
}
}
}
'Java > BOJ' 카테고리의 다른 글
[BOJ] 백준 10164. 격자상의 경로 (0) | 2024.05.28 |
---|---|
[BOJ] 백준 14890. 경사로 (0) | 2024.05.27 |
[BOJ] 백준 11728. 배열 합치기 (0) | 2024.05.15 |
[BOJ] 백준 2828. 사과 담기 게임 (0) | 2024.05.14 |
[BOJ] 백준 14244. 트리 만들기 (0) | 2024.05.13 |