Jun's Development Journey
[BOJ] 20055번 컨베이어 벨트 위의 로봇 본문
문제
20055번: 컨베이어 벨트 위의 로봇
길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부
www.acmicpc.net
풀이
중요한점
1) 로봇이 밑에 달려서 가는게 아니다.
2) 올라가는 점은 무조건 비워있어야하고, 내려가는 점의 로봇도 땅으로 내려야한다.
3) 컨베이어 벨트가 움직일 때 로봇도 움직이니 각각 배열을 만들어 둘다 움직여줘야한다.
=> 그렇게 어려운 문제는 아니었는데 문제를 이해하는데 너무 많은 시간을 쏟은 문제였다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
import java.util.StringTokenizer;
import java.util.Map.*;
public class BOJ_20055 {
static boolean isPossible(int[] remain, int K){
int cnt=0;
for(int i=0;i<remain.length;i++){
if(remain[i]==0)
cnt++;
if(cnt==K)
return false;
}
return true;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int[] remain = new int[2*N];
boolean[] robot= new boolean[N];
int level=0;
st = new StringTokenizer(br.readLine());
for(int i=0;i<2*N;i++)
remain[i] = Integer.parseInt(st.nextToken());
//1번 : 올라가는 위치, N번 : 내려가는 위치
//로봇이 어떤 칸에 올라가거나 이동하면 내구도 1 감소
//내구도 0 칸에 로봇 올라갈 수 없다.
while(isPossible(remain,K)){
int tmp = remain[2*N-1];
//벨트 회전
for(int i=2*N-1;i>0;i--)
remain[i] = remain[i-1];
remain[0] = tmp;
//로봇 회전
for(int i=N-1;i>0;i--)
robot[i] = robot[i-1];
robot[0] = false;
//끝 로봇 내리기
robot[N-1] = false;
//로봇 이동
for(int i=N-1;i>0;i--){
if(robot[i-1] && !robot[i] && remain[i]>=1){
robot[i] = robot[i-1];
robot[i-1] = false;
robot[i] = true;
remain[i]--;
}
}
//올라가는 위치 로봇 올리기
if(!robot[0] && remain[0]>=1){
robot[0] = true;
remain[0]--;
}
level++;
}
System.out.println(level);
}
}
'BOJ > Implement' 카테고리의 다른 글
[BOJ] 13458번 시험 감독 (0) | 2021.05.26 |
---|---|
[BOJ] 3985번 롤 케이크 (0) | 2021.05.25 |
[BOJ] 17827번 달팽이 리스트 (0) | 2021.05.12 |