알고리즘/[문제풀이] 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);