알고리즘/[문제풀이] BOJ
[BOJ] 20055 - 컨베이어 벨트 위의 로봇
be-lgreen
2021. 10. 18. 20:36
https://www.acmicpc.net/problem/20055
20055번: 컨베이어 벨트 위의 로봇
길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부
www.acmicpc.net
난이도
단순구현/ 난이도 ⭐️ / 1시간10분
더보기
#include <iostream>
#include <vector>
using namespace std;
/*
4 5
10 1 10 6 2 3 8 2
5 8
100 99 60 80 30 20 10 89 99 100
*/
int main()
{
int n, k;
scanf("%d %d", &n, &k);
int in;
vector<int> duration;
vector<int> v;
for (int i = 0; i < (2 * n); i++)
{
scanf("%d", &in);
duration.push_back(in);
v.push_back(0);
}
int step = 0;
while (1)
{
step += 1;
// 1.
int temp = v[v.size() - 1];
v.erase(v.end() - 1);
v.insert(v.begin(), temp);
v[n - 1] = 0; // check point1 ) 처음에 v.size()-1로 작성해서 틀림.
temp = duration[duration.size() - 1];
duration.erase(duration.end() - 1);
duration.insert(duration.begin(), temp);
// 2.
for (int i = n - 2; i >= 0; i--)
{
if (v[i] == 1 && v[i + 1] == 0 && duration[i + 1] >= 1)
{
v[i + 1] = 1;
v[i] = 0;
duration[i + 1] -= 1;
if (duration[i + 1] == 0)
{
k--;
}
}
}
v[n - 1] = 0;
// 3.
if (duration[0] > 0)
{
v[0] = 1;
duration[0] -= 1;
if (duration[0] == 0)
{
k--;
}
}
// 4.
if (k <= 0)
{
break;
}
}
printf("%d", step);
}
주요 문법
벡터 마지막 원소 지우기
v.erase(v.end() - 1);
벡터 0위치에 원소 삽입하기
v.insert(v.begin(), 0);