1. 문제 풀이
문제 유형은 시뮬레이션입니다. 시뮬레이션은 특정 알고리즘을 사용하여 풀이하기보단 문제에서 설명하는 내용을 구현할 수 있는가를 묻는 문제입니다. 또 시뮬레이션 유형 특성상 문제의 지문이 길기 때문에 잘 읽어내리면서 구현해야 하는 항목들을 뽑아내는 것이 중요합니다. 여기서는 총 5단계의 절차와 예외 처리에 대한 설명이 잘 나와있기 때문에 단계를 나누어 함수로 구현해 합치는 작업을 하시면 쉽게 풀 수 있습니다.
2. 코드
#include <bits/stdc++.h>
using namespace std;
typedef long long ll; typedef unsigned long long ull; typedef pair<int,int> pi; typedef pair<ll, ll> pl;
typedef tuple<int, int, int> ti; typedef tuple<ll, ll, ll> tl; typedef vector<int> vi; typedef vector<ll> vl;
typedef vector<pi> vpi; typedef vector<pl> vpl; typedef vector<ti> vti; typedef vector<tl> vtl;
typedef vector<string> vs; typedef vector<bool> vb; typedef queue<int> qi; typedef queue<ll> ql;
typedef queue<pi> qpi; typedef queue<pl> qpl; typedef queue<ti> qti; typedef queue<tl> qtl;
#define fastio(x, y) cin.tie((x))->sync_with_stdio((y))
#define X first
#define Y second
#define pb push_back
#define sz(x) (int((x).size()))
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
const char nl = '\n';
int n, k;
deque<pi> belt;
void get_off_on_belt() {
belt[n - 1].Y = 0;
}
void rotate() {
belt.push_front(belt.back());
belt.pop_back();
get_off_on_belt();
}
void put_on_robot() {
auto &[hp, exists_robot] = belt.front();
if(hp <= 0) return;
hp--;
exists_robot = 1;
}
void move_robot() {
for(int i = n - 1; i > 0; i--) {
auto &[cur, cur_robot] = belt[i];
if(cur <= 0 || cur_robot) continue;
auto &[prv, prv_robot] = belt[i - 1];
if(!prv_robot) continue;
cur--;
prv_robot = 0;
cur_robot = 1;
}
get_off_on_belt();
}
void chk_durability() {
for(int i = 0; i < n; i++) {
if(belt[i].X == 0) {
belt[i].X = -1;
k--;
}
}
}
int main() {
fastio(nullptr, false);
cin >> n >> k;
deque<pi> (n << 1).swap(belt);
for(auto &[x, y] : belt) cin >> x;
int ans{};
while(k > 0) {
ans++;
rotate();
move_robot();
put_on_robot();
chk_durability();
}
cout << ans;
}
3. 제출 결과
'알고리즘 > 백준' 카테고리의 다른 글
백준 2608번 로마 숫자[C++] (0) | 2025.02.07 |
---|---|
백준 10827번 a^b[Java] (0) | 2025.02.05 |
백준 17141번 연구소 2[C++] (0) | 2025.02.02 |
백준 16940번 BFS 스페셜 저지[C++] (0) | 2025.02.01 |
백준 1726번 로봇[C++] (0) | 2025.01.29 |