#include <iostream>
#include <string.h>
#include <vector>
#include <deque>
 
int main()
{
	int N = 0;
	int K = 0;
	int KCount = 0;
 
	std::cin >> N >> K;
	std::deque<std::pair<int, bool>> onQue = {};
	std::deque<int> offQue = {};
 
	for (int i = 0; i < N; ++i)
	{
		int iNumber = 0;
		std::cin >> iNumber;
		onQue.push_back({ iNumber, false });
	}
 
	for (int i = 0; i < N; ++i)
	{
		int iNumber = 0;
		std::cin >> iNumber;
		offQue.push_front(iNumber);
	}
 
	int iCount = 0;
 
	while (true)
	{
		++iCount;
		std::pair<int, bool> back = onQue.back();
		int front = offQue.front();
		offQue.pop_front();
		offQue.push_back(back.first);
		onQue.pop_back();
		onQue.push_front({ front,false });
 
		for (int i = N - 1; i >= 0; --i)
		{
			if (onQue[i].second)
			{
				if (i == N - 1)
				{
					onQue[i].second = false;
				}
 
				else
				{
					if (!onQue[i + 1].second && onQue[i + 1].first > 0)
					{
						onQue[i + 1].second = true;
						--onQue[i + 1].first;
 
						if (onQue[i + 1].first == 0)
							++KCount;
 
						onQue[i].second = false;
					}
				}
 
			}
		}
 
		if (onQue.front().first > 0)
		{
			onQue.front().second = true;
			onQue.front().first = onQue.front().first - 1;
 
			if (onQue.front().first <= 0)
				++KCount;
		}
 
		if (KCount >= K)
		{
			std::cout << iCount;
			return 0;
		}
 
	}
}

list로 이용했더니 뒤에서 부터 계산하고 그러는게 좀 안되더니 deque를 사용하니 접근이 쉬운지 바로 나오더라...

+ Recent posts