https://www.acmicpc.net/problem/13335
13335번: 트럭
문제 강을 가로지르는 하나의 차선으로 된 다리가 하나 있다. 이 다리를 n 개의 트럭이 건너가려고 한다. 트럭의 순서는 바꿀 수 없으며, 트럭의 무게는 서로 같지 않을 수 있다. 다리 위에는 단지 w 대의 트럭만 동시에 올라갈 수 있다. 다리의 길이는 w 단위길이(unit distance)이며, 각 트럭들은 하나의 단위시간(unit time)에 하나의 단위길이만큼만 이동할 수 있다고 가정한다. 동시에 다리 위에 올라가 있는 트럭들의 무게의 합은 다리의 최
www.acmicpc.net
목표 : 모든 트럭들이 다리를 건너는 최단시간 구하기 조건 : 다리 길이만큼만 트럭이 올라갈 수 있는데, 트럭의 무게의 합이 다리의 최대하중보다 작거나 같아야한다. 다리를 큐로 선언 트럭을 모두 큐에 넣어보기 위해 트럭의 개수만큼 for문을 돌린다. while문을 돌리면서 모든 조건을 검사 1. 다리에 트럭이 없을 때(큐가 비어있을 때) 큐에 현재 트럭을 넣고, 시간을 증가, 다리의 무게 증가, while문 빠져나옴 2. 다리에 트럭이 있을 때 2.1 현재 넣으려는 트럭의 무게와 다리에 있는 트럭의 무게를 합친 것이 최대하중보다 더 크면 큐에 0을 추가해주고, 시간을 증가 2.2 현재 넣으려는 트럭의 무게와 다리에 있는 트럭의 무게를 합친 것이 최대하중보다 같거나 작으면 큐에 현재 트럭을 넣고, 시간을 증가, 다리의 무게 증가,while문을 빠져나옴 3. 트럭의 대수가 다리의 길이와 같을 때 (큐의 사이즈가 다리의 길이) 큐에서 맨 앞 트럭 삭제, 삭제한 트럭만큼 다리 무게 감소 주의 : 모든 시간을 구한 후 마지막 트럭이 건너는 시간(다리의 길이)까지 더해줘야한다. 무게에 지장이 없는 0을 큐에 넣어주고 while문이 끝나지 않아야한다. |
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Queue<Integer> queue = new LinkedList();
int N = sc.nextInt(); // 트럭의 개수
int W = sc.nextInt(); // 다리 길이
int L = sc.nextInt(); // 다리 최대 하중
int time = 0;//시간
int weight = 0;// 다리에 있는 트럭의 무게
int[] truck = new int[N];
for (int i = 0; i < N; i++) {
truck[i] = sc.nextInt();
} // end of input
for (int i = 0; i < N; i++) {
while (true) {
if (queue.isEmpty()) {// 다리에 아무것도 없으면
queue.offer(truck[i]);
time++;
weight += truck[i];
break;
} else if (queue.size() == W) {// 큐의 사이즈가 다리의 길이이면
weight -= queue.remove();
} else { //다리에 트럭이 있을 때
if (weight + truck[i]> L) { //현재 트럭의 무게 + 다리에 있는 트럭의 무게가 최대 하중보다 크다면
queue.offer(0);
time++;
} else { //최대하중보다 작다면
queue.offer(truck[i]);
time++;
weight += truck[i];
break ;
}
}
}
}
System.out.println(time+W);
}// end of main
}
'ALGORITHM > 프로그래머스 | 백준 | 삼성 | 카카오' 카테고리의 다른 글
[프로그래머스] 프린터 (0) | 2020.05.05 |
---|---|
[프로그래머스] 주식가격 (0) | 2020.05.04 |
[백준] 10026번 적록색약 (0) | 2020.04.01 |
[백준] 3985번 롤케이크 (0) | 2020.04.01 |
[백준] 2577번 숫자의 개수 (0) | 2020.04.01 |