1. 문제

www.acmicpc.net/problem/20055

 

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

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

www.acmicpc.net

2. 접근방법

시뮬레이션 문제

 

벨트의 체력 배열 [N*2]

로봇 유무 배열 [N]

 

1. 벨트가 회전한다 (로봇도 같이 이동 - N번째 자리에 도착한 로봇 삭제)

2. 로봇이 이동한다 (N-1부터 검사 검사 자리에 로봇이 있고 그 다음 자리에 로봇이 없고 다음자리 체력이 0보다 크다면 이동하고 체력을 깍는다.)

3. 로봇을 올린다 (0번째 자리에 로봇이 없고 체력이 0보다 크다면 올리고 체력을 깍는다.)

4. 지금까지 체력을 깍아서 0이 된 자리가 K개 이상이면 종료.

 

5. 1 - 4 반복 시켜서 종료 됐을 때 반복 횟수 출력

 

3. 자바 코드

package Silver;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class P20055컨베이어벨트위의로봇 {
	static int N,K;
	static int health[];
	static boolean robot[];
	static int cnt, Rbreak;
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());
		health = new int[N*2];
		cnt = 0;
		robot = new boolean[N];
		st = new StringTokenizer(br.readLine());
		for(int i = 0 ; i < N *2 ; i++)
			health[i] = Integer.parseInt(st.nextToken());
		
		while(true) {
			cnt++;
			rotate();
			robotmove();
			putonRobot();
			if(Rbreak >= K)
				break;
		}
		System.out.println(cnt);
		
		
		
	}
	
	static void rotate() {
		int pre = health[N*2-1];
		for(int i = 0 ; i < N*2 ; i++) {
			int now = health[i];
			health[i] = pre;
			pre = now;
		}
		for(int i = N-2 ; i >= 0 ; i--)
			robot[i+1] = robot[i];
		robot[0] = false;
		robot[N-1] = false;
	}
	static void robotmove() {
		for(int i = N-1 ; i >= 0 ; i-- ) {
			if(robot[i] && !robot[i+1] && health[i+1] != 0) {
				robot[i] = false;
				robot[i+1] = true;
				health[i+1] -=1;
				if(health[i+1] == 0)
					Rbreak++;
			}
		}
		robot[N-1] = false;
	}
	static void putonRobot() {
		if(health[0] != 0) {
			robot[0] = true;
			health[0]--;
			if(health[0] == 0)
				Rbreak++;
		}
	}
}

4. 마치며

문제 설명이 개떡 같았지만

나쁘지 않은 시뮬문제

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준] 2056 작업  (0) 2021.02.03
[백준] 13460 구슬 탈출2  (0) 2021.02.03
[백준] 4179 불!  (0) 2021.01.29
[백준] 3019 테트리스  (0) 2021.01.24
[백준] 15661 링크와 스타트  (3) 2021.01.24

+ Recent posts