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를 출력한다.

 

입력예제

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;
}