백준 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;
}
반응형