Search
Duplicate
🗄️

백준 - 20555 컨베이어 벨트 위의 로봇

간단소개
백준 20555번
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Algorithm
태그
Simulation
Implementation
Scrap
8 more properties

풀면서 생각한것들

로봇을 내리는 때는 두 번 있다.

처음에는 벨트를 돌린 이후 바로 내리는것이 아닌 로봇을 움직이고나서 내리도록 구현해서, 원래 움직일 수 있었던 로봇들이 움직이지 못하는 경우가 생겼다.
1.
가장 처음에 수행될 벨트 돌리기 후, 내리는 위치에 있는 로봇을 내려야 한다.
2.
이후 로봇들이 한 칸씩 움직인 이후, 내리는 위치에 있는 로봇을 또 내려야 한다.

데크나 큐를 사용 할 수 없다.

컨베이어 벨트를 돌린다는것은 배열의 요소들을 한 칸씩 오른쪽으로 옮기는 행위다. 따라서 Queue나 Deque를 사용해서 poll -> 이후 바로 add와 같이 구현하려고 생각했지만, 해당 문제에서 큐나 데크를 사용하지 못하는 이유가 있다.
1.
값을 변경해야한다. 로봇이 이동하는것을 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); } }
Plain Text
Show All
Search
제출 번호
아이디
문제
문제 제목
결과
메모리
시간
언어
코드 길이
제출한 시간