소요시간 : 총 70분
문제유형 : 시뮬레이션
어렵지 않은 구현이다. 다만 문제, 예제가 조금 불친절해서 로봇을 올리고 내릴 때, 파악을 잘 해야한다...
이 부분을 파악 하느라 시간이 많이 소모되었다.
HINT) 로봇은 N의 위치(문제 상 N) 에 가면 벨트 아래로 내려간다.
따라서, 벨트가 그냥 회전할 경우인 1번 // 로봇이 혼자 이동하는 경우인 2번에서 사건이 두번 발생한다.
=> 각각의 경우에 ..일단, 로봇을 다 움직이고 내리게끔 코드를 짜면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class boj_20055_컨베이어벨트위의로봇 {
static int[] belt, robot;
static int N, K;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
belt = new int[2 * N];
robot = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < 2 * N; i++) {
belt[i] = Integer.parseInt(st.nextToken());
}
int process = 0;
while (true) {
int t = belt[2 * N - 1];
//1번
for (int i = (2 * N) - 1; i > 0; i--) {
belt[i] = belt[i - 1];
}
belt[0] = t;
for (int i = N - 1; i > 0; i--) {
robot[i] = robot[i - 1];
if (i - 1 == 0 && robot[i - 1] == 1) {
robot[i - 1] = 0;
}
}
if (robot[N - 1] == 1) {
robot[N - 1] = 0;
}
//2번
for (int i = N - 1; i > 0; i--) {
if (belt[i] > 0 && robot[i] == 0 && robot[i - 1] == 1) {
robot[i] = 1;
robot[i - 1] = 0;
belt[i]--;
}
}
if (robot[N - 1] == 1) {
robot[N - 1] = 0;
}
// 3번
if (belt[0] > 0 && robot[0] != 1) {
robot[0] = 1;
belt[0]--;
}
process++;
//4번
if (!howmanyK()) {
break;
}
}
System.out.println(process);
}
public static boolean howmanyK() {
int cnt = 0;
for (int i = 0; i < belt.length; i++) {
if (belt[i] == 0) {
cnt++;
}
if (cnt >= K) {
return false;
}
}
return true;
}
}
'Study Algorithm' 카테고리의 다른 글
| 카카오 2021 신입 공채 순위 검색 문제풀이 Java (0) | 2021.02.17 |
|---|---|
| 카카오 2020 여름 인턴십 보석 쇼핑 (0) | 2021.02.07 |
| 카카오 2019 겨울 인턴십_불량사용자_Java 문제풀이 (0) | 2020.12.24 |
| 백준_11404_플로이드 (플로이드-워셜 알고리즘) (0) | 2020.06.29 |
| 백준_1753_최단경로 (다익스트라 알고리즘 (Dijkstra Algorithm)) (0) | 2020.06.27 |