📍 문제 설명
https://www.acmicpc.net/problem/20055
💡 접근
문제에서 주어진 순서대로 구현하면 되는 시뮬레이션 문제였다.
벨트와 로봇이 회전할 때 로봇이 움직이는게 아닌 벨트가 움직여서 따라가는 거라 내구도의 변화가 없다.
이 부분에서 실수를 해서 시간이 꽤 오래걸렸다.
👩💻 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int s, n, m = 1, v, e, k, r, x, y, answer, cnt;
static int[] arr, dice;
static long[] dp;
static int[][] boardA, boardB;
static boolean[] visited;
static int[] dx = {1,0,-1,0};
static int[] dy = {0,-1,0,1};
static ArrayList<Integer> list;
static StringBuilder sb;
static Queue<Integer> q;
public static void main(String[] args) throws IOException {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
arr = new int[2*n];
//로봇이 있는지 확인하는 배열
visited = new boolean[n];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
System.out.println(T.solution());
}
private int solution() {
while (true) {
//1.벨트 회전 시키기
int temp = arr[arr.length - 1];
for (int i = arr.length - 1; i >= 1; i--) {
arr[i] = arr[i - 1];
}
//첫 지점은 마지막 값
arr[0] = temp;
//1.로봇도 함께 회전시키기
for (int i = visited.length-1; i >= 1; i--) {
visited[i] = visited[i-1];
}
//회전했으니 첫 칸엔 로봇이 없다.
visited[0] = false;
//2.로봇 이동시키기()
visited[n-1] = false;
for (int i = n-1; i > 0; i--) {
//현재 칸에 로봇이 없고 이전 칸에 로봇이 있으며 내구도가 1이상이면 현재 칸으로 로봇 이동시키기
if (!visited[i] && visited[i-1] && arr[i] >= 1) {
visited[i] = true;
visited[i-1] = false;
//현재 위치 내구도 감소
arr[i]--;
}
}
//3.올리는 위치에 로봇 올리기
if (arr[0] > 0 && !visited[0]) {
visited[0] = true;
arr[0]--;
}
cnt = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == 0) cnt++;
}
if (cnt >= k) break;
//단계 증가
m++;
}
return m;
}
private static class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "Point{" +
"x=" + x +
", y=" + y +
'}';
}
}
}