djghdy   4년 전

아래 코드에서 

int arr[1001][1001];

int dp[1001][1001];

순서를 바꿔서 해보면 어떤건 정답이고, 어떤건 런타임에러가 뜨는데 왜이럴까요??

djm03178   4년 전

아마도 arr과 dp는 메모리 주소가 붙어있을 가능성이 큽니다 (정확한 원리는 잘 모르겠습니다). 그런데 후반 이중 for문 안에서 i와 j에 대한 범위 검사 없이 dp의 인덱스에 접근을 하고 있는데, 이 때 인덱스를 벗어난 범위에도 접근을 할 수 있습니다 (예: i == n == 1000,  j == m == 1000 일 때 dp[i + 1][j + 1]은 dp[1001][1001]로 초과). 이 중 한 경우에는 dp에서 인덱스를 초과한 것이 arr의 메모리 주소에 해당해서 에러가 나지 않지만, 그 반대의 경우에는 건드리지 말아야 할 곳을 건드렸다고 볼 수 있을 듯합니다.

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