-
[백준] 컨베이어 벨트 위의 로봇Study/Coding Test 2021. 10. 16. 22:11
https://www.acmicpc.net/problem/20055
20055번: 컨베이어 벨트 위의 로봇
길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부
www.acmicpc.net
cnt 초기화를 안해줘서 15분 잡아먹은듯...ㅎㅎ
#define _CRT_SECURE_NO_DEPRECATE #include <iostream> #include <cstdio> #include <deque> #include <algorithm> #include <cstring> #include <vector> using namespace std; int N, K; int answer; deque<int> belt; deque<int> robots; void init() { answer = 0; belt = deque<int>(); robots = deque<int>(); } void input() { cin >> N >> K; for (int i = 0; i < N * 2; i++) { int num; cin >> num; belt.push_back(num); } for (int i = 0; i < N; i++) { robots.push_back(0); } } void print() { cout << "belt" << endl; for (int i = 0; i < N * 2; i++) { cout << belt[i] << " "; } cout << endl; cout << "robots" << endl; for (int i = 0; i < N; i++) { cout << robots[i] << " "; } cout << endl; cout << "----------------" << endl; } void rotate() { //벨트 회전 int last = belt[N * 2 - 1]; belt.pop_back(); belt.push_front(last); //로봇 회전 for (int i = N - 1; i >= 1; i--) { robots[i] = robots[i - 1]; } robots[0] = 0; } void solve() { int cnt = 0; //내구도가 0인 칸의 개수. while (cnt < K) { answer++; cnt = 0; //1. 로봇과 함께 한칸 회전. rotate(); //2. 가장 먼저 올라간 로봇부터 회전하는 방향으로 한 칸 이동. robots[N - 1] = 0; //마지막 칸 for (int i = N - 2; i >= 0; i--) { if (robots[i] == 1 && robots[i + 1] == 0 && belt[i + 1] >= 1) { robots[i + 1] = 1; robots[i] = 0; belt[i + 1]--; } } //3. 내구도가 0이 아니면 로봇을 올린다. if (belt[0] != 0) { robots[0] = 1; belt[0]--; } //4. 내구도가 0인 칸의 개수 for (int i = 0; i < N * 2; i++) { if (belt[i] == 0) cnt++; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); //freopen("input.txt", "r", stdin); init(); input(); solve(); cout << answer << endl; return 0; }
'Study > Coding Test' 카테고리의 다른 글
[백준] 어른상어 (0) 2021.10.17 [백준] 마법사 상어와 파이어볼 (0) 2021.10.17 [백준] 마법사 상어와 파이어스톰 (0) 2021.10.15 [백준] 마법사 상어와 토네이도 (0) 2021.10.15 [백준] 상어 초등학교 (0) 2021.10.15