11650번 - 좌표 정렬하기
일단 메모리초과가 뜨는 코드는 아래에 있습니다.
저기서 temp를 그냥 전역변수로
temp[100000][2] = { 0, }; 로 설정하니까 맞다고 뜨긴한데 왜그런지 납득이 안갑니다.
merge함수안에서 free로 해제도 해주었고 설령 해제를 안한다 하더라도 100000 * 4 (int 포인터 크기) * 2 (int값 2개) * 2 (temp와 ar) byte니까
메모리 초과가 안떠야 하는 것 아닌가요?
전역변수로 설정하면 왜 메모리초과가 안 뜨고
아래 malloc으로 했을 때는 왜 메모리초과가 뜨는지 좀
알려주시면 감사하겠습니다.
9번째 줄에서는 0번부터 right번까지 할당하는데, 56번째 줄에서는 left부터만 해제하고 있습니다.
merge시마다 0~right를 순회하는 것은 전체 과정에서 O(N^2)가 됩니다. 반면에 left~right의 순회는 O(NlogN)입니다. 할당받는 양과 해제하는 양이 복잡도부터 다르기 때문에 최종적으로 할당받은 상태로 남는 메모리 역시 O(N^2)으로 제한을 초과하게 됩니다.
댓글을 작성하려면 로그인해야 합니다.
skiwer98 2년 전
일단 메모리초과가 뜨는 코드는 아래에 있습니다.
저기서 temp를 그냥 전역변수로
temp[100000][2] = { 0, }; 로 설정하니까 맞다고 뜨긴한데 왜그런지 납득이 안갑니다.
merge함수안에서 free로 해제도 해주었고 설령 해제를 안한다 하더라도 100000 * 4 (int 포인터 크기) * 2 (int값 2개) * 2 (temp와 ar) byte니까
메모리 초과가 안떠야 하는 것 아닌가요?
전역변수로 설정하면 왜 메모리초과가 안 뜨고
아래 malloc으로 했을 때는 왜 메모리초과가 뜨는지 좀
알려주시면 감사하겠습니다.