https://www.acmicpc.net/problem/13335
큐의 크기를 다리에 들어갈 수 있는 차의 개수로 설정하여,
지속적으로 개수와 크기를 비교하며 큐에 트럭을 더한다.
만약, 트럭이 다리를 건널 수 없으면 큐와 `path`에 0을 추가하여 횟수를 카운팅한다.
그리고 마지막에는 큐에 남아있는 값을 확인하여 남이있는 값이 있다면 다리의 길이만큼 더해준다.
하지만, 다리가 1인 경우 결국 전체 횟수는 N + 1만큼 걸리므로 바로 반환해준다.(엣지케이스)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
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 L = Integer.parseInt(st.nextToken());
int W = Integer.parseInt(st.nextToken());
int[] road = new int[N];
Queue<Integer> q = new LinkedList<>();
Queue<Integer> waitQ = new LinkedList<>();
List<Integer> path = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++){
road[i] = Integer.parseInt(st.nextToken());
}
if(L == 1){
System.out.println(N + 1);
return;
}
for(int i = 0; i < L - 1; i++){
path.add(0);
q.add(0);
}
int sum = 0;
for(int i = 0; i < N; ){
if(q.size() < L && sum + road[i] <= W){
q.add(road[i]);
path.add(road[i]);
sum += road[i];
i++;
} else{
q.add(0);
path.add(0);
}
if(q.size() == L){
int temp = q.poll();
if(temp != 0){
sum -= temp;
}
}
}
int count = 0;
if(!q.isEmpty()){
count = L;
}
// System.out.println(path);
System.out.println(path.size() + count - (L - 1));
}
}
//4 2 10
//7 4 5 6
'PS > 백준' 카테고리의 다른 글
[백준] 콘센트 - Java 23843 (0) | 2024.10.24 |
---|---|
[백준] 닭싸움 팀 정하기 - Java 1765 (0) | 2024.10.24 |
[백준] 우주 탐사선 - Java 17182 (0) | 2024.10.21 |
[백준] 램프 - Java 1034 (0) | 2024.10.10 |
[백준] 센티와 마법의 뿅망치 - Java 19683 (0) | 2024.10.10 |