본문 바로가기

시뮬레이션과 구현

컨베이어 벨트 위의 로봇

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

 

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

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

www.acmicpc.net

회전하는 문제 -> deque를 쓰자

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

 

1021번: 회전하는 큐

첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가

www.acmicpc.net

con.push_front(con.back());
con.pop_back();

 

deque의 index는 0부터 시작한다.

 

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <deque>
 
using namespace std;
 
deque<int> naegu;
deque<bool> con;  //로봇이 위에 있으면 true, 없으면 false
 
int n, k;
//컨베이어 벨트의 회전
void rotate()
{
    con.push_front(con.back());
    con.pop_back();
 
    naegu.push_front(naegu.back());
    naegu.pop_back();
    con[n - 1= false;  // 아래 줄로 가면 로보트는 사라지므로!
}
 
//로보트의 이동
void move()
{
    // 가장 먼저 올라간 로봇부터 움직이니 i--
    for (int i = n - 2; i >= 0; i--)
    {
        // 컨베이어 벨트에 로봇이 있고, 다음 칸에 로봇이 없고, 내구도가 0보다 크고
        if ((con[i]) && (!con[i + 1]) && (naegu[i + 1> 0))
        {
            con[i] = false;
            con[i + 1= true;
            naegu[i + 1]--;
        }
        con[n - 1= false// 아래 줄로 가면 로보트는 사라지므로!
    }
}
 
void put_robot()
{
    if (!con[0&& naegu[0> 0)
    {
        con[0= true;
        naegu[0]--;
    }
}
 
int check()
{
    int cnt = 0;
    for (int i = 0; i < 2 * n; i++)
    {
        if (naegu[i] == 0)
            cnt++;
    }
    return cnt;
}
int main()
{
    cin >> n >> k;
    int ans = 1;
    for (int i = 0; i < 2 * n; i++)
    {
        int x;
        cin >> x;
        naegu.push_back(x);
        con.push_back(false);
    }
 
    while (true)
    {
        //단계대로 진행
        rotate();
        move();
        put_robot();
 
        int c = check();
        //k 이상
        if (c >= k)
        {
            cout << ans << '\n';
            return 0;
        }
        ans++;
    }
    return 0;
}
cs

'시뮬레이션과 구현' 카테고리의 다른 글

톱니바퀴  (0) 2023.08.01
경사로  (0) 2023.07.11
주사위 굴리기  (1) 2023.05.29
치킨 배달 - 구현 + 조합(재귀)  (0) 2023.05.23
드래곤 커브  (0) 2023.05.23