1. 문제 링크
2. 문제 및 입출력예제
3. 문제 풀이
- 내구성과 로봇의 유무를 링크드리스트로 관리했다.
- 내구도 0인 칸이 K개가 될 때까지 3 함수를 반복한다.
- 함수1은 내구도와 로봇 리스트의 마지막을 꺼내 처음에 넣는다.
- 함수2는 움직일 수 있는 로봇이면 한 칸 씩 옮기고 리스트 내용을 수정한다.
- 올리는 위치에 로봇 유무를 확인하고 로봇을 추가한다.
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 |