728x90
--- 문제 ---
--- 코드 ---
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;
import java.util.LinkedList;
public class Bj20055 {
static int N,K;
static int result, zero_cnt;
static int[] belt;
static boolean[] robot;
static int stoi(String s) {
return Integer.parseInt(s);
}
static void move() {
// final down
robot[N-1] = false;
// belt move 1 step
int last = belt[2*N-1];
for(int i=2*N-1; i>0; --i) {
belt[i] = belt[i-1];
}
belt[0] = last;
// robot move 1 step to final
if(robot[N-2]) {
// after down
robot[N-2] = false;
}
// move other robots
for(int i=N-3; i>=0; --i) {
if(robot[i]) {
// if can step one more
if(!robot[i+2]&& belt[i+2]>0) {
// if not final turn true;
if(i!=N-3) {
robot[i+2]=true;
}
belt[i+2]--;
if(belt[i+2]==0) {
++zero_cnt;
//robot[i] = false;
}
}
else {
robot[i+1] = true;
}
// turn false
robot[i] = false;
}
}
// put new one it can
if(belt[0]>0) {
robot[0] = true;
belt[0]--;
if(belt[0]==0) {
++zero_cnt;
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = stoi(st.nextToken());
K = stoi(st.nextToken());
belt = new int[2*N];
robot = new boolean[N];
result = 0;
zero_cnt = 0;
st = new StringTokenizer(br.readLine());
for(int i=0; i<2*N; ++i) {
belt[i] = stoi(st.nextToken());
}
while(zero_cnt<K) {
++result;
move();
}
System.out.println(result);
}
}
--- 출처 ---
반응형
'Algorithms > Baekjoon' 카테고리의 다른 글
[Java] 백준 알고리즘 1543번 문제 : 문서 검색 (문자열, String) (0) | 2021.09.08 |
---|---|
[Java] 백준 알고리즘 4949번 문제 : 균형잡힌 세상 (문자열, String) (0) | 2021.09.08 |
[Java] 백준 알고리즘 19236번 문제 : 삼성 SW 역량 테스트 기출 문제 - 청소년 상어 (DFS, 깊이 우선 탐색) (0) | 2021.04.19 |
[Java] 백준 알고리즘 16234번 문제 : 삼성 SW 역량 테스트 기출 문제 - 인구 이동 (BFS, 너비 우선 탐색) (0) | 2021.04.18 |
[Java] 백준 알고리즘 16236번 문제 : 삼성 SW 역량 테스트 기출 문제 - 아기 상어 (BFS, 너비 우선 탐색) (0) | 2021.04.18 |