긴 문제 설명에 압도당하지 말고, 말 그대로 시뮬레이션을 해보는 것이다!
단, 문제를 정확하게 이해하고, 문제 조건을 정확하게 파악하고 구현하는 것이 중요하다!
2번째 틀린 이유 : Scanner랑 BufferedReader 섞어서 쓰지말자. IDE에서는 정상적으로 동작하지만, 코드를 채점 프로그램에 제출하면 정확한 원인은 모르겠으나 입력을 받는 과정에서 NoElment 에러발생.
틀린 이유
문제를 잘못이해함
로봇은 1번 칸에 올리고, N번 칸에서 내린다.
=>로봇의 회전, 이동 범위 : 0 ~ N-1⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐
문제 설명
벨트가 회전할 때 N=>N+1이 되고, 2N은 1이 된다고 했다. 벨트의 회전 범위는 배열 인덱스로 따지자면 0~(2N-1)이다.
로봇 옮기는 과정의 첫번째 회전 단계에서 벨트는 로봇과 함께 회전한다고 했다.
이는 함께 회전할 뿐이지, 로봇은 N-1 위치에서 내려줘야한다!⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️
로봇도 벨트와 함께 0 2N-1 범위로 회전하는 것이 아니다‼️‼️‼️‼️‼️‼️‼️‼️‼️‼️‼️
틀린 이유
회전
로봇 회전 : 로봇이 오른쪽으로 1칸 회전한 후 0번째는 로봇이 없는 걸로 처리해줘야한다!!!
로봇은 0~N-1 범위 내에서 회전하고, 회전단계에서는 회전만 한다!
로봇 회전 범위가 0~2N-1 로 생각하고, 0번ㄴ째 칸에 2N-1로봇이 이동하는 거라고 잘못 생각해서 틀렸다.
로봇 이동
- 로봇의 현재위치를 x라고 하면 robot[x+1] = 2; 로 처리하려고 생각했는데
현재 로봇이 어느 위치에 있는지 알 수 없어서 구현을 생각해내지 못했다.
=> for문 돌리면서 i번째 칸에 로봇이 있다면 +1번째 칸으로 이동처리해주면 된다.
- 현재위치 => 다음위치 이동할 때 현재위치 로봇은 '0'으로 없는 것으로 처리해줘야한다!
로봇 올린다.
package ss;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;
public class RobotOnConveyerBelt {
static int[] robot,conveyer;
static int N,K;
static void rotate_belt_robot() {
int tmp = conveyer[2*N-1];
int r_tmp = robot[2*N-1];
for(int i=2*N-1;i>0;i--) {
conveyer[i] = conveyer[i-1];
robot[i] = robot[i-1];
}
conveyer[0] = tmp;
robot[0] = r_tmp;
}
static int solve() {
int ans = 0;
int cnt = 0;
boolean flag = true;
while(flag) {
//1.로봇과 함께 벨트 회전.
rotate_belt_robot();
//2.로봇 이동.
int r_next = 0;//로봇현재위치 +1. 로봇 현재위치=?
if(robot[r_next]!=2 && conveyer[r_next] >=1) {//로봇이있는 경우.
robot[r_next] = 2;
conveyer[r_next]--;
}
//3.올리는 위치 0 아니면 로봇 올린다.
if(conveyer[0] != 0) {
robot[0] = 2;
conveyer[0]--;
} else {
rotate_belt_robot();
}
for(int i=0;i<2*N;i++) {
conveyer[i] = 0;
cnt++;
if(cnt == K) {
flag = false;
}
}
ans++;
}
return ans;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Scanner sc = new Scanner(System.in);
String[] input = br.readLine().split(" ");
N = Integer.parseInt(input[0]);
K = Integer.parseInt(input[1]);
robot = new int[2*N];
conveyer = new int[2*N];
for(int i=0;i<2*N;i++) {
conveyer[i] = sc.nextInt();
}
System.out.println(solve());
br.close();
}
}
// for(int i=0;i<2*N;i++) {//i=0,1,2,3,4,5
// input = br.readLine().split(" ");
// conveyer[i] = Integer.parseInt(input[i]);
// }
//for(int i=0;i<2*N;i++) {
// System.out.print(conveyer[i]+" ");
//}
//System.out.println();