백준 11866 c++

magicdrill·2024년 4월 8일

백준 문제풀이

목록 보기
271/673

백준 11866 c++

#include <iostream>
#include <queue>

using namespace std;

int input(int lower, int upper);
void check_exit_order_by_Josephus_permutation(int N, int K, queue <int>& exit_order);
void print_result(queue <int> exit_order);

int main(void)
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int K, N;
	queue <int> exit_order;

	N = input(1, 1000);
	K = input(1, N);
	check_exit_order_by_Josephus_permutation(N, K, exit_order);
	print_result(exit_order);
	
	return 0;
}

int input(int lower, int upper)
{
	//cout << "input" << endl;
	int A;

	while (1)
	{
		cin >> A;
		if (A >= lower && A <= upper)
		{
			break;
		}
		else
		{
			;
		}
	}

	return A;
}

void check_exit_order_by_Josephus_permutation(int N, int K, queue <int> &exit_order)
{
	//cout << "check_exit_order_by_Josephus_permutation" << endl;
	int i;
	queue <int> round_table;

	for (i = 1; i <= N; i++)//테이블에 앉히기
	{
		round_table.push(i);
	}

	while (!round_table.empty())
	{
		for (i = 0; i < K - 1; i++)
		{
			round_table.push(round_table.front());
			round_table.pop();
		}
		exit_order.push(round_table.front());
		round_table.pop();
	}

	return;
}

void print_result(queue <int> exit_order)
{
	//cout << "print_result" << endl;
	int i;
	int size = exit_order.size();

	cout << "<";
	for (i = 0; i < size - 1; i++)
	{
		cout << exit_order.front() << ", ";
		exit_order.pop();
	}
	cout << exit_order.front() << ">\n";
	exit_order.pop();

	return;
}

0개의 댓글