Programming/Algorithm
[Algorithm] C++ 멀티태스킹(카카오 먹방 문제 변형, 시뮬레이션)
100winone
2019. 12. 25. 01:27
입력설명
첫 번째 줄에 작업의 개수 N(1<=N<=2,000)이 주어지고 그 다음 N줄에 걸쳐 각 작업을 처리하는데 걸리는 시간이 초단위로 주어진다. 한 작업을 처리하는데 필요한 시간은 1,000를 넘지 않는다. 마지막 줄에 정전이 발생한 시간 K(1<=K<=2,000,000)가 주어진다.
출력설명
첫 번째 줄에 몇 번 작업부터 다시 시작해야 하는지 작업 번호를 출력한다. 만약 더 이상 처리할 작업이 없다면 -1를 출력한다.
입력예제
3
1
2
3
5
출력예제
3
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int a[2001];
int main() {
int n, k, i, p = 0, cnt = 0, tot = 0; // tot 는 총 작업시간 더할 애
scanf("%d", &n);
for (i = 1; i <= n; i++) {
scanf("%d", &a[i]);
tot += a[i]; // -1을 구현해주기 위해
}
scanf("%d", &k);
if (k >= tot) {
printf("-1\n");
return 0;
}
while (1) {
p++;
if (p > n) p = 1;
if (a[p] == 0) continue;
a[p]--;
cnt++; // 1초 지났다는 것을 표현
if (cnt == k) break;
}
/* 전기가 들어왔다 */
while (1) {
p++;
if (p > n) p = 1;
if (a[p] != 0) break;
}
printf("%d\n", p);
return 0;
}