1. 유형
구현
2. 풀이
- 로봇 배열, 내구도 배열 지정
- 규칙 순서대로 진행
규칙에는 안나와 있는거 같은데, 상식적으로 처음에 컨베이어 벨트 한칸 이동시
벨트 위에 있는 로봇 또한 같이 움직이는 걸 생각해 주자.
3. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, K, list[], robot[];
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine(), " ");
N = Integer.valueOf(st.nextToken());
K = Integer.valueOf(st.nextToken());
st = new StringTokenizer(in.readLine(), " ");
list = new int[2 * N];
robot = new int[N];// 1이 존재하는거
for (int i = 0; i < 2 * N; i++) {
list[i] = Integer.valueOf(st.nextToken());
}
int turn = 0;
out:while (true) {
turn++;
// 한칸씩 이동
int tmp = list[(2 * N) - 1];
for (int i = (2 * N) - 1; i >= 1; i--) {
list[i] = list[i - 1];
}
list[0] = tmp;
// 로봇도 벨트에 따라 이동
for (int i = N - 1; i >= 1; i--) {
robot[i] = robot[i - 1];
}
robot[0]=0;
// 로봇 한칸 이동
for (int i = N - 1; i >= 0; i--) {
if(i==N-1) {
robot[i]=0;
continue;
}
if (robot[i] == 1 && robot[i + 1] == 0 && list[i + 1] > 0) {
robot[i] = 0;
robot[i + 1] = 1;
list[i+1]--;
}
}
//처음에 로봇하나 올리기
if(list[0]>0 && robot[0]==0) {
list[0]--;
robot[0]=1;
}
//내구도 판단
int cnt=0;
for(int i=0; i<2*N; i++) {
if(list[i]==0) {
cnt++;
}
if(cnt>=K) {
break out;
}
}
}
System.out.println(turn);
}
}
4. 느낀점
문제를 잘 읽고 빠르게 이해를 해야겠다.
글 해독력을 향상시켜야 한다
'알고리즘 > 백준' 카테고리의 다른 글
[백준 - 20303] 골드3 - 할로윈의 양아치 (0) | 2020.12.13 |
---|---|
[백준 - 1405] 골드5 - 미친 로봇 (0) | 2020.12.11 |
[백준 - 20166] 골드5 - 문자열 지옥에 빠진 호석 (0) | 2020.12.01 |
[백준 - 19952] 골드4 - 인성 문제 있어?? (0) | 2020.11.30 |
[백준 - 20165] 골드5 - 인내의 도미노 장인 호석(java) (0) | 2020.11.30 |