본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 11866번: 요세푸스 문제 0 [C++]

문제출처: https://www.acmicpc.net/problem/11866

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

1. 코드

#include <iostream>

using namespace std;

class quee {
	int f;
	int b;
	int* arr;
public:
	quee(int n) {
		f = 0;
		b = -1;
		arr = new int[n];
	}
	void push(int n) {
		arr[++b] = n;
	}
	int pop() {
		if (empty()) return -1;
		return arr[f++];
	}
	int size() {
		return b - f + 1;
	}
	int empty() {
		return (b - f) == -1;
	}
	~quee() {
		delete[] arr;
	}
};
int main(void)
{
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	int n, limit;
	cin >> n >> limit;

	quee q(n * n);
	for (int i = 1; i <= n; i++) q.push(i);
	cout << "<";
	while (q.size() != 1)
	{
		for (int i = 0; i < limit - 1; i++)
			q.push(q.pop());
		cout << q.pop() << ", ";
	}
	cout << q.pop() << ">";
	return 0;
}

(실행)

2. 풀이

클래스를 활용하여 큐를 구현한 다음에 limit에 입력한 값만큼 push()에 pop()을 한 값을 넣고 끝나면 pop을 한 값을 출력했다. 그리고 예제 출력과 같은 형식으로 만들어서 작성하면 쉽게 해결할 수 있다.