#include <iostream>
#include <queue>
using namespace std;
int main(int argc, char **argv){
int N, K, i = 0, cnt = 0;
queue<int> q;
scanf("%d %d",&N,&K);
int * circle = new int[N];
while(q.size() != N){
if(circle[i] != 1) { // 1이면 circle
cnt++;
}
if(cnt == K){
circle[i] = 1;
q.push(i+1);
cnt = 0;
}
i++;
if(i >= N){
i = 0;
}
}
printf("<");
for(int i=0; i<N; i++){ // 큐에 넣고 한번에 출력
if(i == N - 1){
printf("%d", q.front());
} else {
printf("%d, ", q.front());
}
q.pop();
}
printf(">");
return 0;
}
또 엄청 비효율적으로 풀고 말았다. 큐를 쓰긴 쓰는데 그냥 결과가 나오면 큐에 넣고 출력만 하는 그런 코드
이상적인 것은 우선 큐에 모든 숫자를 다 넣고 주어진 수(K)의 배수가 아니면 큐에서 제일 앞에 있는 수를 빼서 뒤에 넣는다. 그러면 계속 제일 앞에서 K번째 수만 출력하면 된다. 헉 너무 천재같다...!
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int main(void) {
int num, data;
queue<int> q;
cin >> num >> data;
cout << "<";
for (int i = 1; i <= num; i++) {
q.push(i);
}
while (!q.empty()) {
for (int j = 0; j < data-1; j++) {
q.push(q.front());
q.pop();
}
cout << q.front();
q.pop();
if (!q.empty())
cout << ", ";
}
cout << ">";
}
출처: https://parkssiss.tistory.com/81 [코딩 쟁이]