import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Robot_On_Conveyor_Belt {
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());
int len = 2*N+1;
int [] durable = new int[len];
int [] robot = new int[len];
st = new StringTokenizer(br.readLine());
int count = 0;
for (int i = 1; i < len; i++) {
durable[i] = Integer.parseInt(st.nextToken());
}
int dangae = 1;
int prerobot=0;
while(true) {
int pre = durable[len-1];
int next;
int nextrobot;
for (int i = 0; i < len-1; i++) {// 로봇, 컨베이어 같이 회전
next = durable[i+1];
durable[i+1]= pre;
pre = next;
nextrobot = robot[i+1];
robot[i+1] = prerobot;
prerobot = nextrobot;
}
if(robot[N]==1){ // 로봇 내리는 위치에 있다면 내림
robot[N]=0;
}
for(int i = N-1; i>=1; i--){// 로봇 이동
if(robot[i]==1 && robot[i+1]==0 && durable[i+1]>0){
robot[i+1] = 1;
robot[i]=0;
durable[i+1] -= 1;
if(durable[i+1]==0) {
count++;
}
}
}
if(robot[N]==1){// 로봇 내리는 위치에 있다면 내림
robot[N]=0;
}
if(durable[1]>0){// 올리는 위치에 로봇 올림
durable[1] -= 1;
robot[1] = 1;
prerobot = 0;
if(durable[1]==0)
count++;
}
if (count >=K) {
break;
}
dangae++;
}
System.out.println(dangae);
}
}
📢이풀이의 핵심은 컨베이어 내구도 체크하는 배열, 로보트 유무를 체크하는 배열을 따로만들어서 같이 회전시키는 것이 핵심이다.
📢 로봇이 움직일때(회전, 이동)마다 N번째칸을 확인하는것,
📢 내구도가 감소할때마다(로봇 놓을때, 이동할때) 0인지 확인하는것
이 두가지 조건을 주의하자
아니 일단 난 2N번째에서 로봇 삭제시키는줄 알고 삽짏했다.
또 N번째에서 이게 삭제 시킨다는건지 N+1로 간다는건지 몇번을 문제를 다시 읽어도 모호하다. 이건좀 그렇네..
또 이게 map에 키,값형태로 묶어서 로봇이랑 내구도랑 같이 움직이게 할려했는데 그것도 못하겠다. 그렇게 어려운거 같진 않았는데 삽질 많이 한 문제다