반응형

www.acmicpc.net/problem/20055

 

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

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

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
int n, k, arr[201], cnt, ans;
int visited[201];
// 로봇이 움직이는 경우
// 1. 벨트가 움직일 때 같이 움직임
// 2. 벨트 회전한 후에 로봇이 스스로 움직임
void rotate() {
    int temp = arr[2 * n - 1];
    for (int i = 2 * n - 1; i > 0; i--
        arr[i] = arr[i-1];
    for (int i = n - 1; i > 0; i--)
        visited[i] = visited[i - 1];
    visited[0= 0;
    arr[0= temp;
 }
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> k;
    rep(i, 2 * n)
        cin >> arr[i];
    while (cnt < k) {
        ans++;
        // 1. 벨트 한 칸 회전
        rotate();
        // 2. 로봇 이동
        visited[n - 1= 0;    // 제일 끝 로봇은 바닥으로
        for (int i = n - 2; i >= 0; i--) {
            if (visited[i] && !visited[i + 1&& arr[i + 1> 0) {
                visited[i + 1= 1;
                visited[i] = 0;
                arr[i + 1]--;
                if (arr[i + 1== 0)
                    cnt++;
            }
        }
        // 3. 올라가는 위치에 로봇 올리기
        if (!visited[0&& arr[0> 0) {
            visited[0= 1;
            arr[0]--;
            if (arr[0== 0)
                cnt++;
        }
    }
    cout << ans;
}
cs
반응형

'백준 > 삼성기출' 카테고리의 다른 글

백준 13460  (0) 2021.03.07
백준 12100 [복습 필수]  (0) 2021.03.03
백준 15685 [복습 필수]  (0) 2021.02.23
백준 14503  (0) 2021.02.22
백준 14891  (0) 2021.02.22

+ Recent posts