> For the complete documentation index, see [llms.txt](https://heunnajo.gitbook.io/algorithms-problem-solving-skills/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://heunnajo.gitbook.io/algorithms-problem-solving-skills/implementation/conveyer-belt-robot.md).

# Conveyer Belt Robot

어려웠던 부분

문제 이해부터 쉽지 않았다.&#x20;

![문제 설명](/files/-MccfxAmvtJHscTzaJkn)

구현 문제 : 문제에서 시키는 대로 쭉 따라하면 된다.\
일단 필요한 자료구조/객체부터 생각해보자.\
1\. 내구도 값을 저장할 정수형 배열\
\
알고리즘\
내구도값 == 0인 칸 갯수 0 이하일 때까지 반복\
&#x20; 1\. 벨트, 로봇 한칸씩 회전. 내리는 위치 로봇 내린다.\
&#x20; 벨트 회전, 내구도값 업데이트 시 주의 사항 : i,i+1에서 A\[i+1] = A\[i]가 되기 때문에 끝(N-1)에서 부터 시작해서 A\[N-1] 값을 임시 변수에 먼저 저장해준다!\
\=>A\[0]을 저장하는 것이 아니라 A\[N-1]값을 먼저 챙겨준다!

```java
//1.벨트가 각 칸 위에 있는 로봇과 함께 한 칸 회전한다. 내리는 위치에 있는 로봇은 내린다.
			//컨베이어 벨트 회전.
			int tmp = A[2*n-1];
			for(int i=A.length-1;i>0;i--) {
				A[i] = A[i-1];
			}
			A[0] = tmp;
			//로봇 회전
			//로봇 회전하면서 올리는 위치, 내리는 위치 로봇은 없어지기 때문에 false 처리해준다!
			for(int i=n-1;i>0;i--) {
				robot[i] = robot[i-1];
			}
			robot[0] = false;
			robot[n-1] = false;
```

\
&#x20; 2\. 먼저 벨트에 올라간 로봇부터 이동시킨다.\
반복 조건 : 끝에서(로봇 배열의 길이-1)부터 시작.\
&#x20;                 i-1 때문에 반복은 0보다 클 때까지.\
&#x20;robot\[i] = true; robot\[i-1] = false; //i-1번째 로봇이 i번째로 옮겨가기 때문에 i-1번째는 false처리 해준다.

```java
for(int i=n-1;i>0;i--) {
	if(robot[i-1]&&!robot[i]&&A[i]>=1) {
			robot[i] = true;
			robot[i-1] = false;
			A[i]--;
	}
}
```

3\. 올리는 위치에 내구도값이 0이 아니면 로봇 올린다.

```java
if(A[0]>0) {
  robot[0] = true;
	A[0]--;
}
  cnt++;
```

1\~3의 연산을 A\[i]==0 이 k개 될때까지 반복한다.

```java
public static solution(int cnt){
	while(check()){
	    //1~3 반복
	}
}

public static boolean check() {
		int cnt=0;
		for(int i=0;i<A.length;i++) {
			if(A[i]==0) {
				cnt++;
			}
		}
		if(cnt>=k) {
			return false;
		}
		return true;
	}
```

![입,출력 예제](/files/-MccgDgKV93xs9gO-KK2)

**벨트의 내구도값을 저장하는 배열**과 **로봇의 유무 저장하는 배열을** 따로 만들어서 총 2개의 배열을 이용한다.&#x20;

알고리즘\
1\. 벨트 회전\
A\[n-1] 값이 먼저 사라지기 때문에 A\[n-1]먼저 tmp에 저장해둔다!

```
//컨베이어 벨트 회전.
			int tmp = A[0];
			for(int i=2*n;i>0;i--) {
				A[i] = A[i-1];
			}
			A[2*n-1] = tmp;
```

\
2\. 로봇 회전\
3\. 로봇 이동\
&#x20; 조건 : A\[i]-1>=0(A\[i]>=1)\
&#x20; 이동하는 칸을 i번째 칸이라고 하면 robot\[i] = true, robot\[i-1] = false, A\[i]--<br>

근데 로봇 회전, 로봇 이동 왜 따로 하지?
