문제 : www.acmicpc.net/problem/13335
13335번: 트럭
입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트
www.acmicpc.net
문제 유형 : 구현
풀이방식 : 문제에 있는 내용을 while문과 배열로 구현, 배열돌리기 유의!
소스코드
package BOJ;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_13335_트럭_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()); // 다리의 최대하중
st = new StringTokenizer(br.readLine(), " ");
int[] truck = new int[n]; // 트럭 무게
int[] bridge = new int[w]; // 다리 상태
boolean[] visited = new boolean[n]; // 사용한 트럭
for (int i = 0; i < n; i++) {
truck[i] = Integer.parseInt(st.nextToken());
}
int time = 0;
int weight = 0; // 현재 다리의 무게
while(true) {
time++; // 1. 시간증가
weight-=bridge[w-1]; // 2. 현재 다리의 무게에서 다리의 마지막칸에 있는 무게 빼기
for (int i = w-1; i > 0; i--) { // 3. 다리 한칸씩 이동
bridge[i] = bridge[i-1];
}
int now_truck = -1; // 4. 현재 이동할 차례 트럭
for (int i = 0; i < n; i++) {
if(!visited[i]) {
now_truck = i;
break;
}
}
if(now_truck!=-1&&weight+truck[now_truck]<=L) {
// 5. 다리에 현재 이동할 차례의 트럭 무게가 최대하중 이하이면 bridge[0]에 현재 이동할 차례의 트럭 넣기
weight+=truck[now_truck];
visited[now_truck] = true;
bridge[0] = truck[now_truck];
}else {
bridge[0] = 0;
}
if(now_truck==-1&&weight==0) break;
}
System.out.println(time);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA]백준_5427_불 (0) | 2021.01.25 |
---|---|
[JAVA]백준_1260_DFS와BFS (0) | 2021.01.24 |
[JAVA]백준_10819_차이를최대로 (0) | 2021.01.19 |
[JAVA]백준_10974_모든 순열 (0) | 2021.01.19 |
[JAVA]백준_10597_순열장난 (0) | 2021.01.18 |