jjy1715   3년 전

제가 배열로 큐짜서 했는데 이거 배열이 공간을 너무 많이 차지해서 런타임에러뜨는건가요?

sgchoi5   3년 전

보통 런타임 에러는 배열이 할당된 영역외에 read / write 해서 많이 발생하거든요.

우선, stl queue 를 써서 잘 되는지 해보고, 그 이후에 만드신 queue 로 해보세요.

크기는 문제가 아닌 듯 하네요.

jjy1715   3년 전

n과 m이 5000 5000일 경우 비주얼스튜디오에서도 어느정도 지나면 돌아가질 않네요 혹시 stl말고 큐를 이런식으로 짜서 하는 방법 없을까요...

제가 짠 큐는 너무 비효율적인거같네요

jeul2   3년 전

[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잡고 앞에 비어있는 배열을 재사용하는 방법으로 하니깐 풀렸습니다

댓글을 작성하려면 로그인해야 합니다.