[1158] 조세퍼스 문제
풀이
N번째 값을 만날 때까지 front에 있는 값을 pop해서 back에 push 하면 된다.
내 풀이
Queue 두 개 사용해서 출력 편하게 하기. 시간은 더 오래걸림.
#include <cstdio>
#include <iostream>
#include <queue>
using namespace std;
int n,m;
queue<int> q;
queue<int> out;
int main(void) {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		q.push(i);
	}
	while (!q.empty()) {
		for (int j = 0; j < m - 1; j++) {
			q.push(q.front());
			q.pop();
		}
		out.push(q.front());
		q.pop();
	}
	printf("<");
	while (out.size() != 1) {
		printf("%d, ", out.front());
		out.pop();
	}
	printf("%d> ", out.front());
	return 0;
}
백준님 풀이
Queue 하나만 사용하기
#include <cstdio>
#include <iostream>
#include <queue>
using namespace std;
int n,m;
queue<int> q;
int main(void) {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		q.push(i);
	}
	printf("<");
	for (int i = 0; i < n - 1; i++) {
		for (int j = 0; j < m - 1; j++) {
			q.push(q.front());
			q.pop();
		}
		printf("%d, ", q.front());
		q.pop();
	}
	printf("%d>", q.front());
	return 0;
}