0207free   3년 전

코드를 최대한 간결하게 수정해봤습니다.

65%정도까지 정답이 갔다가 런타임 에러가 납니다.

ideone에서 돌렸을 때


1 1000000을 넣었을때

115763까지만 연산이 되고 

그 다음 부터 숫자가 제대로 안나오면서

런타임에러가 납니다.

대체 왜 이러는지 모르겠습니다.

메모리 문제인가요?

고수님들 도와주세요 !!

djs100201   3년 전

지금 생각해보니까 i*j이 부분에서 런타임에러가 나는 것 같군요

i가 최대 10 ^ 6 이고 j 가 최대 10^6이라 i *j가 int형 범위가 넘어가게 됩니다.

int형 범위가 넘어가면 음수부터 다시 시작하기 때문에  i*j<=n을 만족하게 되죠

그렇다면 arr[i*j]에 접근하게 되는데

i*j가 음수이므로 런타임에러가 나는 것 같습니다.

0207free   3년 전

물론 i의 최대는 10^6이고 j의 최대는 i가 2일때 10^6/2+1 까지 올라가기는 합니다만.. 제 생각엔..

i가 10^6일 경우에는 j가 2부터 시작하기 떄문에 i*j<=n를 처음부터 만족하지 않아 i*j는 최대 2*10^6에서 끝나고

j가 최대가 되는 경우에는 i가 2일 경우 i*j는 (10^6/2+1)*2 즉 10^6+2에서 끝나기 때문에

i*j가 int형 범위를 넘어가는 일은 안 생기지 않을 까요?

int 형 범위는 20억 까지 니까요.

아 이 문제 왜 런타임에러가 나는지 잘 모르겠네요 ㅠㅠ/

djs100201   3년 전

(int*)malloc(sizeof(int) * n);

이 부분 (n+10)으로 바꾸고 그대로 제출하면 맞네요

죄송합니다 잘못알려드렸네요

0207free   3년 전

와 정말 감사합니다. 해결은 됬는데요.

근데 왜 n+10을 해주는 건가요?

djs100201   3년 전

n까지 해주면 0부터 n-1인덱스까지 배열에 저장되니까 넉넉하게 n+10으로 했습니다

0207free   3년 전

아아 정말 감사합니다!!!

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