코딩/문제

백준 11866 요세푸스 문제 0

Hun die 2022. 6. 28. 10:41

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

 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

 

#include <iostream>
#include <queue>

using namespace std;

bool s[1001] = { false };
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N, K;
	cin >> N >> K;
	queue<int> q;

	int c = 0;

	for (int i = 0; i < N; i++)
	{
		for (int j = 0; j < K; j++)
		{
			
			c++;
			if (c > N)
			{
				c -= N;
			}
			while (s[c] == true)
			{
				c++;
				if (c > N)
				{
					c -= N;
				}
			}
			if (c > N)
			{
				c -= N;
			}
			
		}
		q.push(c);
		s[c] = true;
	}
	cout << "<";
	while(!q.empty())
	{
		cout << q.front();
		if (q.size() != 1)
		{
			cout << ", ";
		}
		q.pop();
	}
	cout << ">";
}

 

만약 4까지 있다면 탐색을 1 -> 2 -> 3 -> 4로 끝내는게 아닌 원형 방식으로 1 -> 2 -> 3 -> 4 -> 1 같이 회전하며 탐색하게 한다. 

가운데 N을 넘겼을때 예외처리하는 부분인데 처음에 하나만 있었다가 계속 틀리는게 화나서 결국 복사해서 여기저기 넣으니 통과했다.

나중에 깔끔하게 개선을 해야할 것 같다.

'코딩 > 문제' 카테고리의 다른 글

백준 2164 카드2  (0) 2022.06.28
백준 17298 오큰수  (0) 2022.06.28
백준 18258 큐2  (0) 2022.06.28
백준 1874 스택 수열  (0) 2022.06.28
백준 4949 균형잡힌 세상  (0) 2022.06.28