본문 바로가기

Algorithm/BAEKJOON

[BOJ] 20055번 컨베이어 벨트 위의 로봇 (C++) [삼성 SW 역량테스트 기출]

728x90
반응형

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

 

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

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

www.acmicpc.net

 

#include <iostream>
#include <deque>
using namespace std;

int n, k;
deque<pair<int, bool>> dq;
int answer;

int main() {
	cin >> n >> k;
	for(int i = 0; i < 2 * n; i++){
		int x;
		cin >> x;
		dq.push_back({x, false});
	}
	while(true){
		answer++;
		// 1
		int t1 = dq.back().first;
		bool t2 = dq.back().second;
		dq.pop_back();
		dq.push_front({t1, t2});
		dq[n - 1].second = false;
		// 2
		for(int i = n - 2; i >= 0; i--){
			if(dq[i].second){
				if(!dq[i + 1].second && dq[i + 1].first > 0){
					dq[i].second = false;
					if(i != n - 2) dq[i + 1].second = true;
					dq[i + 1].first--;
				}
			}
		}
		// 3
		if(dq[0].first > 0) {
			dq[0].second = true;
			dq[0].first--;
		}
		// 4
		int cnt = 0;
		for(int i = 0; i < 2 * n; i++){
			if(dq[i].first <= 0) cnt++;
		}
		if(cnt >= k) break;
	}
	cout << answer;
	return 0;
}

 

주의할 점

1. 2번에서 로봇을 옮길 때 뒤에 있는 로봇부터 옮겨야 한다. 반복문을 거꾸로 돌린다.

2. 내리는 위치에 도착 후 로봇이 내리므로 내리는 위치에 도착하면 내구성이 감소한다.

728x90
반응형

'Algorithm > BAEKJOON' 카테고리의 다른 글

[BOJ] 7490번 0 만들기 (C++)  (0) 2023.10.30
[BOJ] 19942번 다이어트 (C++)  (1) 2023.10.29
[BOJ] 1781번 컵라면 (C++)  (0) 2023.05.10
[BOJ] 15565번 귀여운 라이언 (C++)  (0) 2023.05.05
[BOJ] 1068번 트리 (C++)  (0) 2023.03.19