boramatlulu   3년 전

TC는 일단 vs에서 돌렸을때 다맞았습니다.

보시면 전역변수로 거의 다 선언한데다가,

그나마 메모리좀 차지할 만 한게 

int t_board[32][12];

이건데 이거도 사실 32*12*4byte라 주어진 조건인 512MB에는 한참이나 많이 남은것같은데

자꾸 메모리 초과가 떠서 어디가 잘못된 건지 잘 모르겠습니다 ㅜㅜㅜ 도와주세요....

jerrome2685   3년 전

여기서 메모리 초과가 날 가능성은 무한 루프가 돌아 vector에 무진장 많은 값이 들어가는 경우가 유력할 것 같습니다.

jerrome2685   3년 전

doRecursion 함수를 보니, 최대 N*H 번 함수를 다시 돌리네요

이러면 메모리, 시간 모두 터질 듯

boramatlulu   3년 전

jerrome2685

일단 vector 부분은 이상이 없음을 확인했습니다. M에 걸려있고 애초에 저 부분이 무한루프는 안 될 거에요

브루트 포스 방식으로 구했는데, 만약 이부분이 문제였다면, 시간 초과가 났어야 말이 되는데 메모리 초과가 난 상태입니다

t_board 라는 전역변수로 선언한 배열에서 처리를 하고 있기 때문에 사실 메모리 초과가 뜨는 것이 이해가 가지 않네요

시간 초과가 났을 때, 메모리 초과까지 내는 건진 몰겠네요

boramatlulu   3년 전

jerrome2685

말씀해주신 부분의 doRecursion(int current, int target) 

이 함수 부분의 메모리가 터지는 것이 문제되는건가 싶어서 계속 보고 있는데,

이 함수가 current >= target이 되는 지점에서 종료되는데 사실 target은 0, 1, 2, 3 만 넣는 계산이라 

재귀적 함수 호출도 사실 current 부분이 최대 3이되는 순간 백트래킹 방식으로 다시 뒤로 가는 구조입니다

그래서 재귀적으로 호출해봐야 사실상 계속 메모리에 담아야할 내용은 단지 3번의 호출밖에 없는데,

왠지 함수가 많이 호출되서 메모리가 터진 것도 아닌거 같습니다. 

대체 왜 메모리 초과인지를 모르겠네요 ㅜㅜㅜ

shg9411   3년 전

문제를 풀지 않아서 이 부분이 문제인지 모르겠지만, int형 함수에서 값을 반환하지 않고있습니다.

boramatlulu   3년 전

shg9411

아 감사합니다 ㅜㅜㅜ

int 반환 함수에 재귀호출 이상하게 불러서 함수가 무한히 호출된 것 같습니다.

이상하게 vs에서는 잘 돌아가던데 이건 그런 에러를 알아서 처리를 해주는건지(?)...

여하튼 코테장에서 주의해야겠네요 :)

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