1. 유형
구현
2. 풀이
문제에서 애매한 부분이 있다.
컨베이어가 움직일 때, 로봇도 같이 움직인다는 말이 안 나와 있다.
물론, 상식적으로 생각하면 로봇도 따라 움직이는게 맞긴하지만 그래도
알고리즘 문제에선 상세하게 적어주는 것이 맞다고 본다.
- 배열 2개 선언(로봇이 위에 있는지, 벨트의 내구도)
- 단계에 맞게 돌리기
3. 코드
import java.util.*;
import java.io.*;
public class Main {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static int N, K, arr[];
static boolean isRobot[];
public static void main(String[] args) throws IOException {
input();
System.out.println(solve());
}
static void input() throws IOException {
st = new StringTokenizer(in.readLine());
N = Integer.valueOf(st.nextToken());
K = Integer.valueOf(st.nextToken());
arr = new int[2*N];
isRobot = new boolean[N];
st = new StringTokenizer(in.readLine());
for(int i=0; i<2*N; i++) {
arr[i] = Integer.valueOf(st.nextToken());
}
}
static int solve() {
int pase=0;
while(true) {
//한칸씩 이동
++pase;
int lastArrPos= arr[2*N-1];
for(int i=2*N-2; i>=0; i--) {
arr[i+1] = arr[i];
}
arr[0] = lastArrPos;
//로봇도 이동
for(int i=N-2; i>=0; i--) {
isRobot[i+1] = isRobot[i];
}
isRobot[0] = false;
//로봇이 마지막에 있는지 확인
if(isRobot[N-1]) {
isRobot[N-1]=false;
}
//로봇 한칸 이동
for(int i=N-2; i>=0; i--) {
if(isRobot[i] && isRobot[i+1]==false && arr[i+1]>=1) {
isRobot[i]=false;
isRobot[i+1]=true;
arr[i+1]--;
}
}
//로봇이 마지막에 있는지 확인
if(isRobot[N-1]) {
isRobot[N-1]=false;
}
//3단계
if(!isRobot[0] && arr[0]>=1) {
arr[0]--;
isRobot[0]=true;
}
//4단계
int kCnt=0;
for(int i=0; i<2*N; i++) {
if(arr[i]<=0) kCnt++;
}
if(kCnt>=K)
break;
}
return pase;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 13901 - (python) 로봇 (0) | 2021.04.28 |
---|---|
백준 3190 - (python) 뱀 (0) | 2021.04.27 |
20057 - 마법사 상어와 토네이도 (0) | 2021.04.18 |
백준 - 6087 레이저 통신 (0) | 2021.03.13 |
백준 - 2458 키순서 (0) | 2021.03.13 |