1. 문제
https://www.acmicpc.net/problem/13335
2. 풀이 과정
1. Truck을 클래스로 선언한다. 속성은 truck의 무게와 다리를 얼마나 건넜는지에 대한 거리 정보 2가지를 가진다.
2. 도착한 트럭이 N개가 될 때까지, simulation을 반복한다.
3. simulation은 도착한 다음 트럭부터 대기중인 트럭(next)까지 돌면서 distance++을 해서 다리를 한칸씩 건너도록 한다.
4. distance가 다리 길이를 넘어서면 도착한 것이고, 다리 위에 있는 트럭의 전체 무게에서 해당 트럭의 무게를 뺀다.
5. next 즉, 대기 중인 트럭이 있을 때, 트럭이 다리 위로 올라갈 수 있는지 확인하고 올라갈 수 있으면 total에 해당 트럭의 무게를 더해준다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, W, L;
static Truck[] truck;
public static class Truck {
int weight;
int distance;
public Truck(int weight) {
this.weight = weight;
this.distance = 0;
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
L = Integer.parseInt(st.nextToken());
truck = new Truck[N];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++) {
truck[i] = new Truck(Integer.parseInt(st.nextToken()));
}
int next = 0, arrived = 0, total = 0;
int time = 0;
while (arrived<N) {
if(truck[arrived].distance == W){
total-=truck[arrived].weight;
arrived++;
}
for(int i=arrived; i<next; i++){
truck[i].distance++;
}
time++;
if(next >= N){ continue;}
if(total + truck[next].weight <= L){
total += truck[next].weight;
truck[next].distance++;
next++;
}
}
System.out.println(time);
}
}
결과
'코딩문제풀이 > Baekjoon' 카테고리의 다른 글
[Java] 백준 15591번 : MooTube (Silver)* (0) | 2022.12.27 |
---|---|
[Java] 백준 10819번 : 차이를 최대로 (0) | 2022.12.26 |
[Java] 백준 11403번 : 경로 찾기 (0) | 2022.12.24 |
[Java] 백준 2210번 : 숫자판 점프 (0) | 2022.12.24 |
[Java] 백준 1475번 : 방 번호 (0) | 2022.12.22 |