20055 - [Java]컨베이어 벨트 위의 로봇
알고리즘/백준

20055 - [Java]컨베이어 벨트 위의 로봇

www.acmicpc.net/problem/20055

 

20055번: 컨베이어 벨트 위의 로봇

길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부

www.acmicpc.net

 

1. 유형

구현

 

2. 풀이

문제에서 애매한 부분이 있다.

 

컨베이어가 움직일 때, 로봇도 같이 움직인다는 말이 안 나와 있다.

 

물론, 상식적으로 생각하면 로봇도 따라 움직이는게 맞긴하지만 그래도 

 

알고리즘 문제에선 상세하게 적어주는 것이 맞다고 본다.

 

  • 배열 2개 선언(로봇이 위에 있는지, 벨트의 내구도) 
  • 단계에 맞게 돌리기

 

3. 코드

import java.util.*;
import java.io.*;

public class Main {
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer st;
	static int N, K, arr[];
	static boolean isRobot[];
	public static void main(String[] args) throws IOException {
		input();
		System.out.println(solve());
	}
	static void input() throws IOException {
		st = new StringTokenizer(in.readLine());
		N = Integer.valueOf(st.nextToken());
		K = Integer.valueOf(st.nextToken());
		arr = new int[2*N];
		isRobot = new boolean[N];
		st = new StringTokenizer(in.readLine());
		for(int i=0; i<2*N; i++) {
			arr[i] = Integer.valueOf(st.nextToken());
		}
	}
	static int solve() {
		int pase=0;
		while(true) {
			//한칸씩 이동
			++pase;
			int lastArrPos= arr[2*N-1];
			for(int i=2*N-2; i>=0; i--) {
				arr[i+1] = arr[i];
			}
			arr[0] = lastArrPos;
			//로봇도 이동
			for(int i=N-2; i>=0; i--) {
				isRobot[i+1] = isRobot[i]; 
			}
			isRobot[0] = false;
			//로봇이 마지막에 있는지 확인
			if(isRobot[N-1]) {
				isRobot[N-1]=false;
			}
			//로봇 한칸 이동
			for(int i=N-2; i>=0; i--) {
				if(isRobot[i] && isRobot[i+1]==false && arr[i+1]>=1) {
					isRobot[i]=false;
					isRobot[i+1]=true;
					arr[i+1]--;
				}
			}
			//로봇이 마지막에 있는지 확인
			if(isRobot[N-1]) {
				isRobot[N-1]=false;
			}
			//3단계
			if(!isRobot[0] && arr[0]>=1) {
				arr[0]--;
				isRobot[0]=true;
			}
			//4단계
			int kCnt=0;
			for(int i=0; i<2*N; i++) {
				if(arr[i]<=0) kCnt++;
			}
			if(kCnt>=K)
				break;
		}
		return pase;
	}
}

'알고리즘 > 백준' 카테고리의 다른 글

백준 13901 - (python) 로봇  (0) 2021.04.28
백준 3190 - (python) 뱀  (0) 2021.04.27
20057 - 마법사 상어와 토네이도  (0) 2021.04.18
백준 - 6087 레이저 통신  (0) 2021.03.13
백준 - 2458 키순서  (0) 2021.03.13