[C++] 백준 11866 : 요세푸스 문제 0
#include <iostream>
#include <queue>
using namespace std;
int main(int argc, char **argv){ // Segfault
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; // cnt == K일 때 아무것도 없는 q에서 front를 구하기 때문에 segfault
}
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값에 접근하려고 했기 때문에 생긴 에러이다. 반복문의 경우 이런 탈출 정의를 잘 해줘야하겠다.
Author And Source
이 문제에 관하여([C++] 백준 11866 : 요세푸스 문제 0), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lamknh/C-백준-11866-요세푸스-문제-0저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)