JOSEPHUS 문제 런타임 오류 질문

  • 람지
    람지

    문제

    JOSEPHUS

    코드

    #include <iostream>
    #include <list>
    
    using namespace std;
    
    int main() {
        int c;
        cin >> c;
    
        for (int tc = 0; tc < c; tc++) {
            int n, k;
            cin >> n >> k;
    
            list<int> army;
    
            for (int i = 1; i <= n; i++) {
                army.push_back(i);  //데이터 넣기
            }
    
            list<int>::iterator iter = army.begin();
    
            while (army.size() > 2) {
                int removeNum = *iter;  //현재 죽을 병사 번호
    
                for (int i = 0; i < k; i++) {
                    if (*iter == army.back()) { //마지막 원소면
                        iter = army.begin();  //리스트의 처음으로
                    }
                    else {
                        ++iter;
                    }
                }
                army.remove(removeNum);
            }
    
            cout << army.front() << " " << army.back() << "\n";
        }
    
        return 0;
    }
    

    에러메세지

    RTE (SIGSEGV: segmentation fault, probably incorrect memory access or stack overflow)

    질문

    iterator가 리스트의 마지막 원소를 가리키고 있다면 처음을 가리키도록 했는데도 오류가 나는 원인을 모르겠습니다. 항상 오류가 나는건 아니고 대부분의 경우 답이 잘 출력되지만 언제는 빈칸이 출력됩니다.

    감사합니다.


    4년 전
0개의 댓글이 있습니다.
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.