반응형
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 |