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

class Belt{
	int durability, id;
	boolean robot;
	
	public Belt(int durability, int id, boolean robot) {
		super();
		this.durability = durability;
		this.id = id;
		this.robot = robot;
	}

	@Override
	public String toString() {
		return "Belt [durability=" + durability + ", id=" + id + ", robot=" + robot + "]";
	}
	
	
}

public class Main {
	
	static int N,M,count;
	static int[] durability = new int[201];
	
	public static void print1D(int[] arr) {
		for(int i=0; i<2*N; i++) {
			System.out.print(arr[i] + " ");
		}
	}
	
	public static void main(String[] args) throws IOException {
		
		//Input
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		st = new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		
		st = new StringTokenizer(br.readLine());
		for (int i=0; i<2*N; i++) {
			durability[i] = Integer.parseInt(st.nextToken());
		}
		
		//System.out.println(N + " " + M);
		//print1D(durability);

		//solution
		solution();
		
	}
	
	public static void solution() {
		
		List<Belt> beltList = new ArrayList<>();
		for(int i=0; i<2*N; i++) {
			beltList.add(new Belt(durability[i], i, false));
		}

		int answer=1;
		while(true) {
			
			System.out.println(answer +"번째입니다");
			System.out.println(beltList);
			//ConveyorBelt 회전
			Belt last = beltList.remove(2*N-1);
			beltList.add(0, last);
			System.out.println("회전시킨다");
			//즉시 내린다 내리는 위치에 있다면
			if(beltList.get(N-1).robot == true) {
				beltList.get(N-1).durability -=1; //여기가 문제 (실수 포인트)
				beltList.get(N-1).robot = false;
			}
			System.out.println(beltList);

			System.out.println("이동시킨다");

			for(int i =2*N-1; i>=1; i--) {
				
				if(!beltList.get(i).robot && beltList.get(i-1).robot && beltList.get(i).durability !=0) {
					beltList.get(i-1).robot =false;
					if(i != 2*N-1) { //여기가 문제 (실수 포인트) 지금은 고친 부분
						beltList.get(i).robot = false;
					}
					beltList.get(i).durability -=1;
				}
			}
			System.out.println(beltList);
			
			System.out.println("싣는다");
			//그다음 올리는 곳에 싣기!
			if(!beltList.get(0).robot && beltList.get(0).durability !=0) {
				beltList.get(0).durability -=1; // 하차하는것까지
				beltList.get(0).robot = true;
			}
			System.out.println(beltList);
			
			//K==0인거 체크하기
			for(int i=0; i<2*N; i++) {
				if(beltList.get(i).durability ==0) {
					count+=1;
				}
			}
			
			System.out.println(count);
			
			
			if(answer ==1000 || count >=M) {
				System.out.println(count);
				
				break;
			}
			System.out.println();
			
			count = 0;
			answer+=1;
		}
		//System.out.println(beltList);
		//System.out.println(answer);
		
	}

}

로봇이 스스로 이동할때도 내리는 구간이 되면 즉시 내려와야 하는데 안내려왔었음

3번째입니다
[Belt [durability=9, id=4, robot=true], Belt [durability=9, id=5, robot=false], Belt [durability=9, id=0, robot=true], Belt [durability=10, id=1, robot=false], Belt [durability=10, id=2, robot=false], Belt [durability=10, id=3, robot=false]]
회전시킨다
[Belt [durability=10, id=3, robot=false], Belt [durability=9, id=4, robot=true], Belt [durability=9, id=5, robot=false], Belt [durability=9, id=0, robot=true], Belt [durability=10, id=1, robot=false], Belt [durability=10, id=2, robot=false]]
이동시킨다
[Belt [durability=10, id=3, robot=false], Belt [durability=9, id=4, robot=false], Belt [durability=8, id=5, robot=true], Belt [durability=9, id=0, robot=false], Belt [durability=9, id=1, robot=true], Belt [durability=10, id=2, robot=false]]
싣는다
[Belt [durability=9, id=3, robot=true], Belt [durability=9, id=4, robot=false], Belt [durability=8, id=5, robot=true], Belt [durability=9, id=0, robot=false], Belt [durability=9, id=1, robot=true], Belt [durability=10, id=2, robot=false]]
0

실수 point1

절반 넘어가서도 로봇이 실려있는게 보인다. (하차할때 제대로 하차가 안되었었음)

이걸로 두 번째 테스트케이스까지 잡음

System.out.println("이동시킨다");

for(int i =N-1; i>=1; i--) {
	if(!beltList.get(i).robot && beltList.get(i-1).robot && beltList.get(i).durability >=1) {
		beltList.get(i-1).robot =false;

		if(i == N-1) { //즉시 내린다.
			beltList.get(i).robot =false;
		}
		beltList.get(i).durability -=1;
	}
}

실수 point2

그리고 맨 위에 회전할때 내구성-1했던것도 빼니까 (안뺐었음 ㅠ)

→ 세 번째 테스트케이스까지 잡음

System.out.println("회전시킨다");
//즉시 내린다 내리는 위치에 있다면
if(beltList.get(N-1).robot == true) {
	beltList.get(N-1).durability -=1; //여기가 문제 (실수 포인트)
	beltList.get(N-1).robot = false;
}

실수 point3

다음으로 실수한 부분 실수 point1에서 예외처리해주고 i==N-1일때 그 다음 else를 안해줘서 이동이 안되었었음 그냥 로봇이 사라지고 끝남

System.out.println("이동시킨다");

for(int i =N-1; i>=1; i--) {
	if(!beltList.get(i).robot && beltList.get(i-1).robot && beltList.get(i).durability >=1) {
		beltList.get(i-1).robot =false;

		if(i == N-1) { //즉시 내린다.
			beltList.get(i).robot =false;
		}else{//true로 해주는 거 어디감?
			beltList.get(i).robot =true;
		}
		beltList.get(i).durability -=1;
}
}

→ 결국 문제를 조금 더 꼼꼼하게 읽고 경우의수를 따져보는 시뮬레이션 그림을 한 번 쭉 그려보고 시작하는게 좋다