[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;
}