글
[삼성 SW 역량 테스트] 컨베이어 벨트 위의 로봇
삼성 SW 역량 테스트 기출 풀이
2020. 11. 24. 08:00
#include <stdio.h>
int N, K;
int A[200];
int solve() {
int ret = 0;
int zero_count = 0;
int robot[200 * 1000];
int front = 0, back = 0;
while (zero_count < K) {
++ret;
int temp = A[2 * N - 1];
for (int i = 2 * N - 1; i >= 1; --i) {
A[i] = A[i - 1];
}
A[0] = temp;
for (int i = front; i < back; ++i) {
++robot[i];
if (robot[i] == N - 1) {
++front;
}
}
for (int i = front; i < back; ++i) {
int next = robot[i] + 1;
if (A[next] == 0 || (i != front && robot[i - 1] == next)) {
continue;
}
robot[i] = next;
if (robot[i] == N - 1) {
++front;
}
--A[next];
if (A[next] == 0) {
++zero_count;
}
}
if (A[0] > 0 && (back == 0 || robot[back - 1] != 0)) {
robot[back++] = 0;
--A[0];
if (A[0] == 0) {
++zero_count;
}
}
}
return ret;
}
int main()
{
scanf("%d %d", &N, &K);
for (int i = 0; i < N; ++i) {
scanf("%d %d", &A[i * 2], &A[i * 2 + 1]);
}
int ret = solve();
printf("%d\n", ret);
return 0;
}