-
20055 - 컨베이어 벨트 위의 로봇Baekjoon 2022. 5. 24. 18:19
풀면서 생각한것들
로봇을 내리는 때는 두 번 있다.
처음에는 벨트를 돌린 이후 바로 내리는것이 아닌 로봇을 움직이고나서 내리도록 구현해서, 원래 움직일 수 있었던 로봇들이 움직이지 못하는 경우가 생겼다.
- 가장 처음에 수행될 벨트 돌리기 후, 내리는 위치에 있는 로봇을 내려야 한다.
- 이후 로봇들이 한 칸씩 움직인 이후, 내리는 위치에 있는 로봇을 또 내려야 한다.
데크나 큐를 사용 할 수 없다.
컨베이어 벨트를 돌린다는것은 배열의 요소들을 한 칸씩 오른쪽으로 옮기는 행위다. 따라서 Queue나 Deque를 사용해서 poll -> 이후 바로 add와 같이 구현하려고 생각했지만, 해당 문제에서 큐나 데크를 사용하지 못하는 이유가 있다.
- 값을 변경해야한다. 로봇이 이동하는것을 boolean 배열처럼 구현하려고 했는데, 중간에 값들을 true나 false로 변경해야 한다. 벨트 각 칸의 내구도도 변화하는 값이기 때문에 마찬가지다.
위 두 가지만 조심하면 그다지 어렵지 않은 문제였다. 테스트 케이스도 잘 나와있어서, 예제만 통과하면 보통 맞는 문제.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { 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()); int[] stream = new int[2 * N]; boolean[] is_robot = new boolean[2 * N]; st = new StringTokenizer(br.readLine()); for (int i = 0; i < 2 * N; i++) stream[i] = Integer.parseInt(st.nextToken()); int z_count = 0; int gen = 0; while (z_count < K) { int temp = stream[2 * N - 1]; System.arraycopy(stream, 0, stream, 1, stream.length - 1); stream[0] = temp; boolean temp1 = is_robot[2 * N - 1]; System.arraycopy(is_robot, 0, is_robot, 1, is_robot.length - 1); is_robot[0] = temp1; if (is_robot[N - 1]) is_robot[N - 1] = false; for (int i = N - 2; i >= 0; i--) { boolean elem = is_robot[i]; if (elem && !is_robot[i + 1] && stream[i + 1] > 0) { is_robot[i] = false; is_robot[i + 1] = true; stream[i + 1]--; if (stream[i + 1] == 0) z_count++; } } if (is_robot[N - 1]) is_robot[N - 1] = false; if (stream[0] > 0) { is_robot[0] = true; stream[0]--; if (stream[0] == 0) z_count++; } gen++; } System.out.println(gen); } }
제출 번호 아이디 문제 문제 제목 결과 메모리 시간 언어 코드 길이 제출한 시간 43725901 kjy0349 20055 컨베이어 벨트 위의 로봇 맞았습니다!! 19508 268 Java 11 1768 1시간 전 'Baekjoon' 카테고리의 다른 글
16197 - 두 동전 (0) 2022.05.28 14888, 15685 - 연산자 끼워넣기 (1), (2) (0) 2022.05.26 1261 - 알고 스팟 (0) 2022.04.22 13549 - 숨바꼭질 3 (0) 2022.04.22 14226 - 이모티콘 (0) 2022.04.20