본문 바로가기
백준 알고리즘/구현

컨테이너 벨트

by paysmile 2021. 4. 18.

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

 

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

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

www.acmicpc.net

 

#include <iostream>

using namespace std;
const int MAX = 201;
int n, k;
pair<int, int>  belt[MAX]; // 내구도 값, 물건 유무(0:없음 1:있음)

int CheckValue() {
	int value = 0;

	for (int i = 1; i <= 2 * n; i++) {
		if (belt[i].first == 0)
			value += 1;
	}
	return value;
}

void MoveBelt() {
	pair<int, int> temp[MAX];

	for (int i = 1; i <= 2 * n; i++) {
		temp[i] = belt[i];
	}

	//땅으로 내려가면 로봇 없어짐
	belt[1] = temp[2 * n];
	belt[1].second = 0;
	for (int i = 1; i <= 2 * n - 1; i++) {
		belt[i + 1] = temp[i];
		if (i > n - 1)	belt[i + 1].second = 0;
	}
}

void MoveRobot() {
	for (int i = n; i >= 1; i--) {
		if (i == n)	belt[i].second = 0;
		else {
			if (belt[i].second == 1) {
				if (belt[i + 1].second == 0 && belt[i + 1].first > 0) {
					belt[i].second = 0;
					belt[i + 1].second = 1;
					belt[i + 1].first -= 1;
				}
			}
		}
	}
	if (belt[1].first > 0 && belt[1].second == 0) {
		belt[1].first -= 1;
		belt[1].second = 1;
	}
}

int main(void) {
	int answer = 0;
	cin >> n >> k;

	for (int i = 1; i <= 2 * n; i++) {
		int value;
		cin >> value;
		belt[i] = make_pair(value, 0);
	}

	while (CheckValue() < k) {
		MoveBelt();
		MoveRobot();
		answer += 1;
	}
	cout << answer << endl;
}

'백준 알고리즘 > 구현' 카테고리의 다른 글

주사위 윷놀이 C++  (0) 2021.04.20
모노미노도미노2 C++  (0) 2021.04.18
청소년 상어 C++  (0) 2021.04.17
마법사 상어와 파이어볼 C++  (0) 2021.04.13
낚시왕 C++  (0) 2021.04.11