반응형
문제
컨베이어 벨트 위의 로봇
https://www.acmicpc.net/problem/20055
풀이
설명
작업이 종료되었을 때 몇 번째 단계가 진행중이었는지를 구하는 문제입니다.
작업 순서는 다음과 같습니다.
- 벨트가 각 칸 위에 있는 로봇과 함께 한 칸 회전합니다.
- 가장 먼저 벨트에 올라간 로봇부터, 벨트가 회전하는 방향으로 한 칸 이동할 수 있다면 이동합니다. 만약 이동할 수 없다면 가만히 있습니다.
- 로봇이 이동하기 위해서는 이동하려는 칸에 로봇이 없으며, 그 칸의 내구도가 1 이상 남아 있어야 합니다.
- 올리는 위치에 있는 칸의 내구도가 0이 아니면 올리는 위치에 로봇을 올립니다.
- 내구도가 0인 칸의 개수가 K개 이상이라면 과정을 종료합니다. 그렇지 않다면 1번으로 돌아갑니다.
예시 코드
function solution() {
const [N, K] = input().split(" ").map(Number);
const belt = input().split(" ").map(Number);
const robots = Array(N).fill(false);
let zeroCnt = 0;
let step = 0;
while (zeroCnt < K) {
step++;
// 1번
belt.unshift(belt.pop());
robots.unshift(robots.pop());
robots[N - 1] = false;
// 2번
for (let i = N - 2; i >= 0; i--) {
if (!robots[i]) continue;
if (robots[i + 1]) continue;
if (belt[i + 1] === 0) continue;
robots[i] = false;
robots[i + 1] = true;
belt[i + 1]--;
if (belt[i + 1] === 0) zeroCnt++;
}
robots[N - 1] = false;
// 3번
if (belt[0] > 0) {
robots[0] = true;
belt[0]--;
if (belt[0] === 0) zeroCnt++;
}
}
return step;
}
'Coding Problem' 카테고리의 다른 글
[BOJ 1965] 상자넣기 (0) | 2025.02.22 |
---|---|
[BOJ 14719] 빗물 (0) | 2025.02.21 |
[BOJ 1343] 폴리오미노 (0) | 2025.02.19 |
[BOJ 17413] 단어 뒤집기 2 (0) | 2025.02.18 |
[BOJ 13413] 오셀로 재배치 (0) | 2025.02.13 |