
#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
int n, k, tot = 0, cnt = 0, pos = 0;
bool flag = false;
scanf("%d", &n);
vector<int> task(n+1, 0);
for(int i = 1; i < task.size(); i++)
{
scanf("%d", &task[i]);
tot += task[i];
}
scanf("%d", &k);
if(k >= tot)
{
printf("%d", -1);
return 0;
}
while(true)
{
pos++;
if(pos > n) pos = 1;
if(task[pos] == 0) continue;
task[pos]--;
cnt++;
if(cnt == k) break;
}
while(true)
{
pos++;
if(pos > n) pos = 1;
if(task[pos] != 0)
{
printf("%d", pos);
return 0;
}
}
return 0;
}
1. 일의 개수를 n, 정전에 걸리는 시간을 k, 일을 하는데에 걸리는 시간을 tot, 일을 한 번 할 때마다 걸린 시간을 cnt, 현재 몇 번째 일을 하는지 알기 위한 pos 변수를 선언한다.
2. 일을 하는데에 걸리는 시간이 정전하기 전( k >= tot ) 이라면 정전하기 전에 모든 일이 끝났기 때문에 -1을 출력
3. 정전이 될 때까지 1번째 일부터 계속해서 일을 하고 정전이 되면 정전 직전에 했던 일 이후에 끝내지 못한(0이 아닌) 작업이 다시 시작해야하는 작업이다.
이 문제를 풀 때 문제를 잘 이해하지 못해서 정답임에도 오답이 나와서 애를 많이 먹었다.
입력이 3 1 2 3 5 가 들어오면 3번째 작업인 3이 0이 아니기 때문에 3을 출력하게 되는데,
문제에서 우연히 1,2,3 번째 작업이 1,2,3 인 게 나를 헷갈리게 만들었다.
예를 들어 3 244 300 500 5 가 들어오면 출력은 500부터 시작해야하기 때문에 3이 출력된다. 500이 3번째 작업이기 때문에... 500이 출력되어서는 안 된다는 것이다.
