나의정답.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
class Node {
public:
int data;
int pos;
Node* Next;
Node* Prev;
};
class CircularLinkedList {
public:
Node* Head = NULL;
Node* Tail = NULL;
int Count = 0;
Node* AddLast(int data) {
Node* newRoom = new Node();
newRoom->data = data;
if (Head == NULL) {
newRoom->pos = 0;
Head = newRoom;
Head->Next = newRoom;
Head->Prev = newRoom;
}
if (Tail != NULL) {
Tail->Next = newRoom;
newRoom->Prev = Tail;
}
Tail = newRoom;
Tail->Next = Head;
newRoom->pos = newRoom->Prev->pos + 1;
Count++;
return newRoom;
}
void Remove(Node* node) {
if (node == Head) {
Head = Head->Next;
Tail->Next = Head;
}
if (node == Tail) {
Tail = Tail->Prev;
}
if(node->Prev != NULL)
node->Prev->Next = node->Next;
if (node->Next != NULL)
node->Next->Prev = node->Prev;
Count--;
}
};
int main(int argc, char** argv) {
//freopen("input.txt", "rt", stdin);
int n, k, tmp;
CircularLinkedList* a = new CircularLinkedList();
Node* curr;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> tmp;
a->AddLast(tmp);
}
cin >> k;
curr = a->Head;
while (k > 0) {
curr->data--;
if (curr->data == 0)
a->Remove(curr);
curr = curr->Next;
tmp = curr->pos;
k--;
}
if (a->Count > 0)
cout << tmp;
else
cout << -1;
delete a;
delete curr;
}