문제에 주어진대로 구현하면 되는 문젠데 어떤 자료구조를 써야할지 모르겠어서 풀이를 참고했다.
컨베이어 벨트는 클래스를 따로 만들어 해당 칸에 로봇이 있는지와 내구도를 저장해준다. 그리고 LinkedList에 저장을 해주는데 LinkedList를 많이 써보지 못해서 애를 먹었다 😅
벨트를 한 칸 회전할 때 belt.add(belt.get(0))하고 belt.remove(0) 해줬는데 자꾸 output이 이상하게 나오는거다. 알고보니 belt.add(0, belt.removeLast()) 해주어야 내가 생각하던 그림이 되는거였다. 첫번째 방식은 그냥 계속 0번째 값을 지우고 뒤에 추가하는거였다.
나머지는 문제에 주어진 대로 구현해주면 된다. LinkedList 공부를 더 해봐야지.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
public static class Belt {
boolean isRobot;
int durability;
public Belt(int durability) {
this.durability = durability;
isRobot = false;
}
public void putRobot() {
isRobot = true;
durability--;
}
}
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 K = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
LinkedList<Belt> belt = new LinkedList<>();
for (int i = 0; i < 2 * N; i++) {
belt.add(i, new Belt(Integer.parseInt(st.nextToken())));
}
int level = 0;
while (K > 0) {
level++;
// 1.
belt.add(0, belt.removeLast());
if (belt.get(N - 1).isRobot) belt.get(N - 1).isRobot = false;
// 2.
for (int i = N - 1; i > 0; i--) {
if (!belt.get(i).isRobot) continue;
if (belt.get(i + 1).isRobot || belt.get(i + 1).durability <= 0) continue;
belt.get(i).isRobot = false;
belt.get(i + 1).putRobot();
if(belt.get(i + 1).durability <= 0) K--;
if (i + 1 == N - 1) belt.get(i + 1).isRobot = false;
}
// 3.
if (belt.get(0).durability > 0) {
belt.get(0).putRobot();
if(belt.get(0).durability <= 0) K--;
}
}
System.out.println(level);
}
}