#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를 사용하니 접근이 쉬운지 바로 나오더라...
'오늘의 알고리즘' 카테고리의 다른 글
[C++] 백준 1522 문자열 교환 (0) | 2022.05.26 |
---|---|
[C++] 백준 2206 벽 부수고 이동하기 (0) | 2022.05.25 |
[C++] 백준 1987 알파벳 (0) | 2022.05.23 |
[C++] 백준 10830 행렬 제곱 (0) | 2022.05.21 |
[C++] 백준 11401 이항 계수 3 (0) | 2022.05.20 |