백준 13335 트럭

실1 .. ㅎㅎ;;
못풀어서 .. 해설을 보고 풀었따 ㅠ.
다시 실1 도전을 해야겠음 ㅎㅎ;;

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

문제의 핵심은 다음과같다

길이가 3인 다리는 건너는데 몇초가 걸릴까 ?

답은 4초가 걸린다이다..

올라가는데 1초 그리고 이동하는데 2초 내리는데 1초

그러면 사실상 나는 가만히있고 누군가 나를 건너게 해주는 상태를 생각해서 표현을 하면 다음과같다..

0kg가 밀어준다고생각하면편하다

0kg가 들어가서 밀어주는 과정 = 1초라고 생각하면 편하다

또한 여기서는 0kg 가 밀어주는게 아니라 이제 트럭과 트럭들이 밀어줄것인데 다리 한계용량이지나면? 이 0kg로 밀어주는 역할을해준다면 이문제는 다소 쉽게 접근할수있다..

코드는 다음과같ㄷ나.

import java.util.*;
import java.io.*;



public class 트럭 {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub

		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());
		int time= 0;
		int cWeight = 0;
		Queue<Integer> TruckList = new LinkedList<>();
		
		st= new StringTokenizer(br.readLine());
		for(int i=0;i<n;i++) {
		
			int cur = Integer.parseInt(st.nextToken());
			while(true) { // 1초 단위로 갱신해줄거임
				if(TruckList.isEmpty()) { // 보드 위에 아무도없다면 바로 추가 
					time++;
					cWeight+=cur;
					TruckList.add(cur);
					break;
				}
				
				// 0이라는 토큰을 넣고 빼는 역할을 한사이클로 해야되는데 꽉차면 빼고 그다음에 안꽉차면 넣는과정을해야됨
				
				if(TruckList.size()==w) {
					cWeight-= TruckList.poll();
					continue;
				}
				if(cWeight+cur>l) { //무게를 초과해서 건널수없는경우 0토큰으로 1초가지남을표시해줌
					time++;
					TruckList.add(0);
				}
				else {
					time++;
					TruckList.add(cur);
					cWeight+= cur;
					break;
				}
			}

		}
		//이거 까지하면 결국 끝날때는 마지막트럭이 올라간상태로 끝난다
		//그러면 그때의 time + 다리의 길이를 더하면 총시간이나옴
	
		System.out.println(time+w);
		
		
		
	}

}

다시..실버1 큐 재도전

좋은 웹페이지 즐겨찾기