
#include <iostream>
#include <queue>
using namespace std;
int main(int argc, char **argv){
int N, K, cnt = 1;
queue<int> q;
scanf("%d %d", &N, &K);
for(int i=1; i<=N; i++){
q.push(i);
}
printf("<");
while(!q.empty()){
if(q.size() == 1){
printf("%d", q.front());
q.pop();
break;
}
if(cnt == K){
printf("%d, ", q.front());
q.pop();
cnt = 1;
} else {
q.push(q.front());
q.pop();
cnt++;
}
}
printf(">");
return 0;
}
오늘의 키포인트
- 전에 풀었던 요세푸스와 같은 형태의 문제, 이번에는 큐를 제대로 사용해서 풀 수 있었다.
- Segfault라는 런타임 에러가 발생했는데 바로 메모리 너머의 것을 사용하려고 했기 때문에 발생한 에러이다. q의 크기가 1일때 출력을 하고 반복문을 멈추게 해야했는데, 해당 break 처리를 하지 않아 cnt==K일 때 실행이 되고 여기서 아무것도 없는 q의 front값에 접근하려고 했기 때문에 생긴 에러이다. 반복문의 경우 이런 탈출 정의를 잘 해줘야하겠다.