Algorithm, Problem Solving/백준(boj)

[백준][Java] 20055 - 컨베이어 벨트 위의 로봇

태오님 2023. 3. 26.

목차

     

    문제 정보

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

     

    20055번: 컨베이어 벨트 위의 로봇

    길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부

    www.acmicpc.net

    난이도 : G5

    유형 : 구현, 시뮬레이션


    문제 풀이

    개인적으로 문제의 내용 설명이 불친절하다고 느꼈다. 문제에 주어진 1 ~ 4 수행과정을 1 세트로 묶어서 카운팅 하여야 한다.

    문제 말대로하면 1 ~ 4 과정을 모두 세서 카운팅하여야 하는데, 그러면 오답이 나올 것이다.


    코드

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class Main {
    
        private int N, K;
        private int[] belt;
        private boolean[] robot;
        private int res;
    
        public void solution() throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine());
            N = Integer.parseInt(st.nextToken());
            K = Integer.parseInt(st.nextToken());
    
            belt = new int[N * 2];
            robot = new boolean[N];
            st = new StringTokenizer(br.readLine());
            for (int i = 0; i < N * 2; i++) {
                belt[i] = Integer.parseInt(st.nextToken());
            }
    
            res = 0;
            while (K > 0) {
                int temp = belt[N * 2 - 1];
                for (int i = N * 2 - 1; i > 0; i--) {
                    belt[i] = belt[i - 1];
                }
                belt[0] = temp;
    
                for (int i = N - 1; i > 0; i--) {
                    robot[i] = robot[i - 1];
                }
                robot[N - 1] = false;
                robot[0] = false;
    
                for (int i = N - 1; i > 0; i--) {
                    if (!robot[i] && robot[i - 1] && belt[i] > 0) {
                        belt[i]--;
                        if (belt[i] == 0) {
                            K--;
                        }
    
                        robot[i] = true;
                        robot[i - 1] = false;
                    }
                }
    
                if (belt[0] > 0) {
                    belt[0]--;
                    if (belt[0] == 0) {
                        K--;
                    }
                    robot[0] = true;
                }
                res++;
            }
    
            System.out.println(res);
        }
    
        public static void main(String[] args) throws IOException {
            new Main().solution();
        }
    }

    댓글