본문 바로가기

Study Algorithm

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

소요시간 : 총 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;
	}
}