[링크드리스트] 1158. 요세푸스 문제

알고리즘/백준 알고리즘

2020. 4. 30. 18:05

1. 문제 해결 전략

링크드 리스트 + 반복자 문제

그리고, 망할 출력문제이다.

 

#include <iostream>
#include <list>
#include <string>

using namespace std;
list<int> ans;
int main()
{
	string s;
	int n, k;
	cin >> n >> k;
	list<int> l;
	for (int i = 0; i < n; i++)
	{
		l.push_back(i + 1);
	}
	auto it = l.begin();
	cout << '<';
	while (!l.empty())
	{
		for (int i = 0; i < k; i++)
		{
			if (it == l.end())
				it = l.begin();
			it++;
		}

		--it;
		ans.push_back(*it);
		it = l.erase(it);
	}
	int count = ans.size();
	for (auto& iter : ans)
	{
		count--;
		if (count == 0)
			cout << iter;
		else
			cout << iter << ", ";
	}
	cout << ">" << endl;
	return 0;
}

 

 

2. 걸린 시간

20분

 

3. 느낀점

앞에 링크드 리스트 문제를 풀어봐서 바로 감이 왔다. 문제의 답을 도출하는데는 5분도 안걸렸다.

다만, 꺾새 형식 출력에 아이디어가 왜 안떠올랐는지.. 이상한짓하다가 마지막에 꼼수부려 해결했다.

그래서 링크드리스트 + 출력문제라고 하고싶다.

 

4. 링크

https://www.acmicpc.net/problem/1158

 

'알고리즘 > 백준 알고리즘' 카테고리의 다른 글

[진법변환] 11005. 진법 변환2  (0) 2020.05.01
[리스트] 1168. 요세푸스 문제 2  (0) 2020.05.01
[리스트] 1406. 에디터  (0) 2020.04.30
[x] 10824 : 네 수  (0) 2020.04.30
[스택] 9012. 괄호  (0) 2020.04.28