반응형
문제링크:www.acmicpc.net/problem/20055
20055번: 컨베이어 벨트 위의 로봇
길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부
www.acmicpc.net
20년도 하반기 삼성 코딩테스트 기출문제입니다.
저는 실제 코딩테스트로 먼저 접했던 문제입니다.
문제는 거의 비슷하고, 코딩테스트에서는 더 자세하게 설명해줍니다.
해야하는 일들을 순서대로 구현하면 되는 시뮬레이션 문제입니다.
- 벨트가 한 칸 회전한다.
- 가장 먼저 벨트에 올라간 로봇부터, 벨트가 회전하는 방향으로 한 칸 이동할 수 있다면 이동한다. 만약 이동할 수 없다면 가만히 있는다.
- 로봇이 이동하기 위해서는 이동하려는 칸에 로봇이 없으며, 그 칸의 내구도가 1 이상 남아 있어야 한다.
- 올라가는 위치에 로봇이 없다면 로봇을 하나 올린다.
- 내구도가 0인 칸의 개수가 K개 이상이라면 과정을 종료한다. 그렇지 않다면 1번으로 돌아간다.
4가지를 반복하며 결과를 도출하면 됩니다.
저는 dequeue 를 사용하지 않고 단순 배열을 이용해서 구현했습니다.
#include <iostream>
#include <vector>
using namespace std;
int n = 0, k = 0;
int arr[201][2] = { 0, };
int cnt = 1;
vector <int> vec;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
//0.
cin >> n >> k;
for (int i = 1; i <= 2 * n; i++)
cin >> arr[i][0];
while (1) {
//1.
int temp = arr[2 * n][0];
int temp2 = arr[2 * n][1];
if (arr[n][1] == 1) { // 나갈친구 미리 제거
arr[n][1] = 0;
}
for (int i = 2 * n; i > 1; i--) {
arr[i][0] = arr[i - 1][0];
arr[i][1] = arr[i - 1][1];
}
arr[1][0] = temp;
arr[1][1] = temp2;
//로봇도 이동시켜줘야지
for (int i = 0; i < vec.size(); i++) {
if (vec[i] < n)
vec[i]++;
else if (vec[i] == n) {
//arr[vec[i] + 1][1] = 0;
vec.erase(vec.begin() + i);
i--;
}
}
//2.
for (int i = 0; i < vec.size(); i++) {
int x = vec[i];
if (x < n && arr[x + 1][0] > 0 && arr[x + 1][1] == 0) {
arr[x + 1][0]--;
arr[x + 1][1] = 1; //로봇이 있다.// 로봇이 있음 1 없음 0
arr[x][1] = 0; // 이제 없다.
vec[i]++;
}
else if (x == n) {
arr[x][1] = 0;
vec.erase(vec.begin() + i);
i--;
}
}
//3.
if (arr[1][1] == 0 && arr[1][0] > 0) {
arr[1][0]--;
arr[1][1] = 1;
vec.push_back(1);
}
//4.
int v = 0;
for (int i = 1; i <= 2 * n; i++) {
if (arr[i][0] == 0)
v++;
}
if (v >= k) {
cout << cnt << endl;
return 0;
}
cnt++;
}
return 0;
}
반응형
'알고리즘 > 시뮬레이션' 카테고리의 다른 글
[백준] 20058-마법사 상어와 파이어스톰(C++) (0) | 2021.04.03 |
---|---|
[백준] 20057-마법사 상어와 토네이도(C++) (2) | 2021.03.30 |
[백준] 8911-거북이(C++) (0) | 2021.01.10 |
[백준] 19236-청소년 상어(C++) (0) | 2020.09.04 |
[백준] 13460-구슬 탈출2(C++) (0) | 2020.08.17 |