보통 런타임 에러는 배열이 할당된 영역외에 read / write 해서 많이 발생하거든요.
우선, stl queue 를 써서 잘 되는지 해보고, 그 이후에 만드신 queue 로 해보세요.
크기는 문제가 아닌 듯 하네요.
1158번 - 요세푸스 문제
[C]저도 비슷한 고민을 해서 댓글 남깁니다... 배열을 가장 많이 쓰는 것이 m = n일 경우인데
숫자를 줄여서 n = 3, m = 3라고 생각하면
i) 푸쉬(enqueue)로 1, 2, 3을 순서대로 큐에 넣고,
ii) m-1번 팝(dequeue) 후 그 값을 다시 푸쉬(enqueue) 합니다.
간단히 큐에 남아있는 원소가 작아도 계속 팝 푸쉬를 생각하면
인덱스0123456789 //초기 큐
값 123
인덱스0123456789 //팝, 푸쉬 연산1
값 0231
인덱스0123456789 //팝, 푸쉬 연산2
값 00312
인덱스0123456789 //3제거후 큐
값 00012
인덱스0123456789 //팝, 푸쉬 연산1
값 000021
인덱스0123456789 //팝, 푸쉬 연산2
값 0000012
인덱스0123456789 //1제거후 큐
값 0000002
인덱스0123456789 //팝, 푸쉬 연산1
값 00000002
인덱스0123456789 //팝, 푸쉬 연산2
값 000000002
인덱스0123456789 //2제거후 큐, 배열 9개 사용
값 000000000
n * m 만큼의 배열을 쓰게 됩니다. 즉 5000*5000은 배열이 너무 많게 되므로
i)앞에 비어있는 아까운 배열을 재사용하거나
ii)맨처음 가정한 배열에 들어간 원소가 m보다 작을 때 드는 헛공간을 줄이거나
하면 된다 생각했습니다.. 그래서 저는 배열 5000잡고 앞에 비어있는 배열을 재사용하는 방법으로 하니깐 풀렸습니다
댓글을 작성하려면 로그인해야 합니다.
jjy1715 6년 전
제가 배열로 큐짜서 했는데 이거 배열이 공간을 너무 많이 차지해서 런타임에러뜨는건가요?