import java.io.*;
import java.util.*;
public class Robot_on_the_conveyor_belt_20055 {
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());
List<Integer> belt = new ArrayList<>();
List<Integer> robots = new ArrayList<>();
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 2*N; i++) {
belt.add(Integer.parseInt(st.nextToken()));
robots.add(0);
}
int cnt = 0;
while(true) {
cnt++;
belt.add(0, belt.remove(belt.size() - 1));
robots.add(0, robots.remove(robots.size() - 1));
robots.set(N-1, 0);
for (int i = N - 2; i > -1; i--) {
if (robots.get(i) == 1 && robots.get(i + 1) == 0 && belt.get(i + 1) > 0){
belt.set(i+1, belt.get(i+1) - 1);
robots.set(i+1, 1);
robots.set(i, 0);
}
}
robots.set(N-1, 0);
if(belt.get(0) > 0) {
belt.set(0, belt.get(0)-1);
robots.set(0, 1);
}
int zeroCnt = Collections.frequency(belt, 0);
if (zeroCnt >= K) {
break;
}
}
System.out.println(cnt);
}
}
이 코드는 "컨베이어 벨트 위의 로봇" 문제를 해결하기 위한 자바 코드입니다. 문제는 로봇이 컨베이어 벨트를 따라 이동하면서 벨트의 내구도를 감소시키는 것이며, 내구도가 0인 칸이 K개 이상이 되면 종료하는 것입니다.
먼저, 컨베이어 벨트의 길이(N), 내구도가 0인 칸의 개수(K), 벨트의 내구도를 입력받습니다.
그 다음에는 무한 루프를 시작합니다. 무한 루프 내에서 아래의 과정을 수행합니다.
카운트를 증가시킵니다.
벨트와 로봇을 한 칸 회전시킵니다. 이는 자료구조에서 맨 뒤의 요소를 맨 앞으로 이동시키는 것입니다. 그리고 "내리는 위치"에 있는 로봇을 0으로 설정합니다.
가장 먼저 벨트에 올라간 로봇부터 벨트가 회전하는 방향으로 한 칸 이동할 수 있는지 확인합니다. 이동하려는 칸에 로봇이 없고, 그 칸의 내구도가 1 이상 남아 있으면 이동합니다. 이동한 칸의 내구도는 1 감소하고, 이동한 칸에 로봇이 있음을 표시하며, 원래 칸의 로봇은 제거합니다.
"내리는 위치"에 있는 로봇을 0으로 설정합니다.
"올리는 위치"에 있는 칸의 내구도가 0이 아니면 올리는 위치에 로봇을 올립니다.
벨트 위에 내구도가 0인 칸의 개수를 확인하여 K개 이상이라면 종료합니다.
마지막으로 몇 번째 단계에서 종료되었는지를 출력합니다. 이는 위에서 카운트한 값을 출력하는 것입니다.
이렇게 로직을 설명하면, 코드를 보면서 이해하기 쉬울 것입니다. 각 단계는 주석으로 표시하여 코드를 따라가는 데 도움이 됩니다.
const fs = require("fs");
const input=fs.readFileSync('/dev/stdin').toString().trim().split(/\s+/).map(Number);
const [N, K, ...belt] = input;
robots = [];
for (let i = 0; i < 2 * N; i++) {
robots.push(0);
}
let cnt = 0;
while (true) {
cnt++;
belt.unshift(belt.pop());
robots.unshift(robots.pop());
robots[N - 1] = 0;
for (let i = N - 2; i > -1; i--) {
if (robots[i] == 1 && robots[i + 1] == 0 && belt[i + 1] >= 1) {
belt[i + 1] -= 1;
robots[i + 1] = 1;
robots[i] = 0;
}
}
robots[N - 1] = 0;
if (belt[0] >= 1){
belt[0] -= 1
robots[0] = 1
}
if (belt.filter((num) => num == 0).length >= K) {
break
}
}
console.log(cnt)
from collections import deque
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
belt = deque(map(int, input().split()))
robots = deque([0]*2*N)
cnt = 0
while True:
cnt += 1
belt.rotate(1)
robots.rotate(1)
robots[N-1] = 0
for i in range(N-2, -1, -1):
if robots[i] == 1 and robots[i+1] == 0 and belt[i+1] >= 1:
belt[i+1] -= 1
robots[i+1] = 1
robots[i] = 0
robots[N-1] = 0
if belt[0] > 0:
belt[0] -= 1
robots[0] = 1
if belt.count(0) >= K:
break
print(cnt)