https://www.acmicpc.net/problem/13335

 

 

문제 분석

- 단순 구현으로 도로 위에 올라갈 수 있는 트럭의 위치가 1씩 변경됨으로 배열을 활용했다. (덱을 활용해서 풀려다가 더 복잡해져서 배열을 활용하였다)

- 시간을 증가시켜가면서 트럭을 이동시키고, 트럭을 이동시키고 나서 맨 앞에 있던 트럭을 빼주고 새로운 트럭을 올릴 수 있다면(무게가 된다면) 새로운 트럭을 도로에 올려준다.

 

 

문제 풀이 

1) 트럭의 정보를 배열에 입력받는다.

2) 도로에 트럭을 올려서 이동시킨다.

2-1) 다리위 트럭을 1칸씩 이동시킨다.

2-2) 제일 앞에 있던 트럭이 목적지에 도달했다면 도로위 무게(weight)를 빼준다.

2-3) 도로에 새로운 트럭을 올릴 수 있다면 도로위 무게(weight)를 추가시키고 도로배열(road[])에 트럭 정보(truck[truckNum])를 넣어준다. 그리고 이동시킬 트럭의 순서(truckNum)를 증가시킨다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	private static int n, w, L; // 트럭의 수, 다리의 길이, 다리의 최대 하중
	private static int[] truck; // 트럭의 무게 정보를 담을 배열
	private static int[] road; // 도로위 트럭의 정보를 담을 배열 
	private static int result; // 최단시간

	// main 함수
	public static void main(String[] args) throws NumberFormatException, IOException {
		input();
	}// main 함수 종료

	// input 함수
	private static void input() throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		st = new StringTokenizer(br.readLine());

		n = Integer.parseInt(st.nextToken());
		w = Integer.parseInt(st.nextToken());
		L = Integer.parseInt(st.nextToken());

		truck = new int[n];
		road = new int[w];

		// 입력
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < n; i++) {
			truck[i] = Integer.parseInt(st.nextToken());
		}

		// 구현
		solution();

		// 출력
		System.out.println(result);

	}// input 함수 종료

	// 구현
	private static void solution() {
		
		int truckNum = 0; // 이동시킬 트럭
		int weight = 0; // 다리 위 트럭의 무게
		
		while(truckNum<n) { // 모든 트럭 이동
			
			// 다리 위 트럭 이동시키기
			int goal = road[0];
			for(int i=0;i<w-1;i++) {
				road[i] = road[i+1];
			}
			road[w-1] = 0;
			
			// 목적지에 도달시킴
			if(goal!=0) {
				weight -= goal;
			}
			
			// 트럭을 하나 더 올림
			if(weight+truck[truckNum]<=L) {
				road[w-1] = truck[truckNum];
				weight += truck[truckNum++];
			}
			result++;
		}
		
		// 마지막 트럭 이동시킴
		result += w;

	}// solution 함수 종료

}// class 종료

'Algorithm > BOJ' 카테고리의 다른 글

BOJ 16935 배열 돌리기 3  (0) 2021.06.11
BOJ 16927 배열 돌리기 2  (0) 2021.06.09
BOJ 16926 배열 돌리기 1  (0) 2021.06.08
BOJ 1932 정수 삼각형  (0) 2021.04.07
BOJ 1890 점프  (0) 2021.04.07