백준 algorithm
백준 11866 조세퍼스 문제 0
cosmohoo
2019. 12. 20. 18:21
반응형

list STL을 이용해서 실제적으로 지우면서 문제를 풀었다.
풀고 나서 다른 풀이들을 보니 원형큐를 이용해서 푸는 방법도 있다.
후자의 방법이 더 빠르게 풀수 있는 방법인듯하다. 다시한번 풀어볼 문제이다.
#include <iostream>
#include <deque>
#include <list>
using namespace std;
int main()
{
list<int> jose;
int N, K;
cin >> N >> K;
for (int i = 1; i <= N; i++)
{
jose.push_back(i);
}
//find first delete node
list<int>::iterator iter = jose.begin();
for (int i = 0; i < K - 1; i++)
{
iter++;
}
cout << '<';
while (!jose.empty())
{
if(jose.size()!=1)cout << *iter << ", ";
else { cout << *iter << "> \n"; }
//erase() returns where deleted next
iter = jose.erase(iter);
if (jose.size() == 0)break;
if (iter == jose.end())//end() means not the last node, It means that last node's next
{
iter=jose.begin();
}
for (int j = 0; j < K - 1; j++)
{
iter++;
if (iter == jose.end())
{
iter = jose.begin();
}
}
}
return 0;
}반응형