20055컨베이어 벨트 위의 로봇

LJM·2023년 7월 4일
0

백준풀기

목록 보기
157/259

https://www.acmicpc.net/problem/20055

구현문제이다. 어렵지는 않았는데 구현하는데 시간이 오래결린다. 예외처리도 힘들었다 배열을 많이 사용하다보니.

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException{

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] input = br.readLine().split(" ");

        int N = Integer.parseInt(input[0]);//2~100
        int K = Integer.parseInt(input[1]);//1~2N
        int maxlen = 2*N;

        input = br.readLine().split(" ");
        int[] dura = new int[maxlen+1];
        for (int i = 1; i < maxlen+1; i++){
            dura[i] = (Integer.parseInt(input[i-1]));
        }

        int takeon = 1;
        int takeoff = N;

        int[] convey = new int[N+1];
        int answer = 0;

        while(true){

            //벨트회전
            takeon--;
            takeoff--;
            if(takeon < 1)
                takeon = maxlen;
            if(takeoff < 1)
                takeoff = maxlen;

            for (int i = convey.length-1; i >= 0 ; i--) {
                if(convey[i] == 1){
                    if(i == convey.length-1)
                        convey[i] = 0;
                    else{
                        convey[i] = 0;
                        convey[i+1] = 1;
                    }

                }
            }

            //박스이동
            for (int i = convey.length-1; i >= 1 ; i--) {
                if(convey[i] == 1){
                    int durapos = i + takeon;//이동하려는 위치의 내구성 인덱스
                    if(durapos > maxlen)
                        durapos -= maxlen;

                    if(i == convey.length-1)
                        convey[i] = 0;
                    else if(convey[i+1] == 0 && dura[durapos] > 0){
                        convey[i] = 0;
                        convey[i+1] = 1;
                        dura[durapos]--;
                    }

                }
            }

            //박스올리기
            if(dura[takeon] > 0 && convey[1] == 0){
                convey[1] = 1;
                dura[takeon]--;
            }


            //내구도검사
            int dcount = 0;
            for (int i = 1; i < dura.length; i++) {
                if(dura[i] == 0){
                    dcount++;
                }
            }

            answer++;
            if(dcount >= K)
                break;
        }

        System.out.println(answer);
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글