https://www.acmicpc.net/problem/20055
20055번: 컨베이어 벨트 위의 로봇
길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부
www.acmicpc.net
구현은 쉬운데 국어가 어려워서 코드의 해설이 아닌 지문의 해설을 보고 겨우 풀었다. 지문을 나름대로 풀어 쓰자면
□ 단계 시작
- 벨트가 1칸 회전한 후 N번 칸(0부터 시작하면 N-1)의 로봇을 내린다.(내릴 때는 내구도 소모 X)
- 벨트 위의 로봇들이 앞 칸으로 전진할 수 있을 경우(앞 칸에 로봇이 없고 내구도가 있을 때) 전진한다.
(문제에서 이 부분을 너무 개떡같이 적어놨다고 생각해요...)
- 1번 칸에 로봇을 올릴 수 있다면(내구도가 있다면) 로봇을 올린다.
■ 단계 끝
로봇 이동 단계에서 인덱스 조회가 많이 일어나서 ArrayList를 사용했는데, 풀이를 찾아보니 Deque에 인덱스로 접근이 가능한 언어도 존재하는 것 같다.
import java.util.*;
import java.io.*;
public class Main {
static BufferedReader br;
static StringTokenizer st;
static StringBuilder sb;
public static void main(String[] args) throws Exception {
br = new BufferedReader(new InputStreamReader(System.in));
sb = new StringBuilder();
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
beltList = new ArrayList<Belt>();
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 2 * N; i++)
beltList.add(new Belt(Integer.parseInt(st.nextToken()), false));
while (true) {
stage++;
rotate();
move();
add();
if (K < 1)
break;
}
System.out.println(stage);
}
static int N, K, stage = 0;
static ArrayList<Belt> beltList;
static void add() {
if (beltList.get(0).durability > 0) {
beltList.get(0).robot = true;
if (--beltList.get(0).durability == 0)
K--;
}
}
static void move() {
for (int i = N - 2; i >= 0; i--) {
if (beltList.get(i).robot && !beltList.get(i + 1).robot && beltList.get(i + 1).durability > 0) {
beltList.get(i).robot = false;
beltList.get(i + 1).robot = true;
if (--beltList.get(i + 1).durability == 0)
K--;
}
if (beltList.get(N - 1).robot)
beltList.get(N - 1).robot = false;
}
}
static void rotate() {
beltList.add(0, beltList.get(beltList.size() - 1));
beltList.remove(beltList.size() - 1);
if (beltList.get(N - 1).robot)
beltList.get(N - 1).robot = false;
}
static class Belt {
int durability;
boolean robot;
public Belt(int durability, boolean robot) {
super();
this.durability = durability;
this.robot = robot;
}
}
}
'Algorithm > 문제' 카테고리의 다른 글
[백준 / JAVA] 21610. 마법사 상어와 비바라기 (G5) (0) | 2024.04.10 |
---|---|
[백준 / JAVA] 21608. 상어 초등학교 (G5) (0) | 2024.04.10 |
[백준 / JAVA] 3190. 뱀 (G4) (0) | 2024.04.07 |
[백준 / JAVA] 16935. 배열 돌리기 3 (G5) (0) | 2023.08.26 |
[백준 / JAVA] 16927. 배열 돌리기 2 (G5) (0) | 2023.08.26 |