32번 줄이 잘못되었습니다.
*l.begin() 을 출력하면 이 소스로도 정답받으실겁니다.
1158번 - 요세푸스 문제
32번 줄이 잘못되었습니다.
*l.begin() 을 출력하면 이 소스로도 정답받으실겁니다.
이미 짐작하셨겠지만 erase는 삭제한 요소의 바로 다음 iterator를 return 시킵니다.
그래서 마지막 while문을 돌고 지운 요소의 인덱스가 마지막에 남는 요소의 인덱스보다 뒤에있으면 오류가 납니다.
while문을 계속 도는동안은 22-26줄이 그것을 커버해줬지만, 마지막 루프에서 지우고 나올땐 보정이 불가능하기때문에 결국 인덱스 범위를 초과한 곳을 출력하려하고
에러로 이어지게됬습니다.
ex)
4 3
10 6
늦은 시간에 명쾌한 답변주셔서 감사합니다.
마지막 원소를 제거함으로써 while문을 탈출했을 때 iterator가 l.begin()으로 이동하게끔 설정하지 않아 문제가 되었던 거군요.
말씀해주셨던 erase했을 때 iterator의 위치 변화 때문에 문제풀때 고생 많이했었는데 답변을 통해 많이 배우고간 것 같습니다. 감사합니다!!
댓글을 작성하려면 로그인해야 합니다.
anacoluthon 3년 전
링크된 정답 처리된 코드 와
밑에 코드(오답 처리된 코드) 입니다.
두 코드의 차이라면 출력방식만 다르게 하였을 뿐인데
(배열로 데이터들을 옮긴 뒤 출력하는 방식과 제거해야할 수를 찾음과 동시에 출력하는 방식)
다른 결과가 나오는 이유를 모르겠습니다.
제가 생각하기에는 출력방식의 문제가 아니라 외적인 문제(cout의 문제 or erase의 문제)같다고 생각되어 이를 알고싶어 질문하였습니다.