[BOJ]200055号:コンベアのロボット(Java)
質問する (Gold 5)
20055号:コンベアのロボット
に答える
問題は本当に理解しにくいですが、
他よりも、急に出力される単語「手順」が何なのか、いくつかの例を見て知るようです.
ここで、1〜4のルーチンを1つのステップと呼び、終了前に合計何回のステップが経過したかを求めることができる.
最初は仕事順に並べられた1,2,3,4が1段階を表すと思っていましたが、
1番目の出力は「2番目」ステップ、すなわち「最初にベルトをつける~」だと思います.問題のあいまいな点が多すぎる💦
問題自体が混同されているほか,通常のシミュレーション問題のように,逐一実施すればよい.
オーダー
❗ロボットは1つの格しか上がらない.したがって、ブールタイプ宣言!
値を0からi+1にコピーすると、値は繰り返しコピーされます.つまりconv[0]の値で、すべての配列がブラシで表示されます!
そのため、2*N-1からiを減らして値をコピーします!
❗「真っ先に上がった」に騙されないように、別の順番をメモ!
どうせN~2 N-1までロボットはいなかったし、最後に一番右(N-1に近い)の子が一番古い子!
コード#コード#
package simulation;
import java.util.*;
import java.io.*;
public class BOJ_20055_컨베이어벨트위의로봇 {
static class Belt{
int power;
boolean robot;
public Belt(int power) {
this.power = power;
this.robot = false;
}
}
static int N, K;
static Belt[] conv;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
conv = new Belt[2*N];
st = new StringTokenizer(br.readLine());
for(int i =0 ; i < 2*N ; i++){
conv[i] = new Belt(Integer.parseInt(st.nextToken()));
}
int stage = 1;
while(true){
// 1. 회전
int p = conv[2*N-1].power;
boolean r = conv[2*N-1].robot;
for(int i = 2*N-1 ; i > 0 ; i--){
conv[i].power = conv[i-1].power;
conv[i].robot = conv[i-1].robot;
}
conv[0].power = p;
conv[0].robot = r;
conv[N-1].robot = false;
// 2. 가장 먼저 올라간 로봇부터, 이동
for(int i = N-1 ; i > 0 ; i--){
if(!conv[i].robot && conv[i-1].robot && conv[i].power >= 1){
conv[i].power --;
conv[i].robot = true;
conv[i-1].robot = false;
}
}
conv[0].robot = false;
conv[N-1].robot = false;
// 3. 올리는 위치에 로봇 올림
if(conv[0].power != 0){
conv[0].robot = true;
conv[0].power --;
}
if(!isValid()) break;
stage++;
}
System.out.println(stage);
}
private static boolean isValid() {
int cnt = 0;
for(int i = 0 ; i < 2*N ; i++){
if(conv[i].power <= 0) cnt++;
}
return cnt < K;
}
}
送信
特に反例はなく、問題をよく理解し、例題さえ正しければ、合格すればいい.
Reference
この問題について([BOJ]200055号:コンベアのロボット(Java)), 我々は、より多くの情報をここで見つけました https://velog.io/@dot2__/BOJ-20055번-컨베이어-벨트-위의-로봇-Javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol