실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 큐 재도전