본문 바로가기

ALGORITHM

백준 20055 컨베이어 벨트 위의 로봇 (Java)

1. 문제 링크

 

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

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

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

  1. 내구성과 로봇의 유무를 링크드리스트로 관리했다.
  2. 내구도 0인 칸이 K개가 될 때까지 3 함수를 반복한다.
  3. 함수1은 내구도와 로봇 리스트의 마지막을 꺼내 처음에 넣는다.
  4. 함수2는 움직일 수 있는 로봇이면 한 칸 씩 옮기고 리스트 내용을 수정한다.
  5. 올리는 위치에 로봇 유무를 확인하고 로봇을 추가한다.

 

4. 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;

public class Main {
	static int N, broken;
	static LinkedList<Integer> power = new LinkedList<>();
	static LinkedList<Boolean> robot = new LinkedList<>();
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] split = br.readLine().split(" ");
		N = Integer.parseInt(split[0]);
		int K = Integer.parseInt(split[1]);
		split = br.readLine().split(" ");
		int temp;
		for(int i=0;i<2*N;i++) {
			temp = Integer.parseInt(split[i]);
			power.offer(temp);
			robot.offer(false);
		}
		broken = 0;
		int count = 0;
		while(broken<K) {
			count++;
			function1();
			function2();
			function3();
		}
		System.out.println(count);
	}
	private static void function1() {
		power.offerFirst(power.pollLast());
		robot.offerFirst(robot.pollLast());
		robot.set(N-1, false);
	}
	private static void function2() {
		for(int i = N-2; i>=0;i--) {
			if(robot.get(i) && !robot.get(i+1) && power.get(i+1) != 0) { 
				robot.set(i, false);
				robot.set(i+1, true);
				power.set(i+1, power.get(i+1) - 1);
				if(power.get(i+1) == 0) {
					broken++;
				}
			}
		}
		robot.set(N-1, false);
	}
	private static void function3() {
		if(!robot.get(0) && power.get(0) != 0) {
			robot.set(0, true);
			power.set(0, power.get(0)-1);
			if(power.get(0) == 0) {
				broken++;
			}
		}
	}
}

 

'ALGORITHM' 카테고리의 다른 글

백준 6593 상범 빌딩 (Java)  (0) 2023.04.21
백준 14502 연구소 (Java)  (0) 2023.04.21
백준 10814 나이순 정렬 (Java)  (0) 2023.04.20
백준 10773 제로 (Java)  (0) 2023.04.19
백준 14719 빗물 (Java)  (0) 2023.04.19