his130   2년 전

제가 처음에 모든 for문의 i를 int 로 설정했었는데 런타임 오류가 발생했습니다.

그리고 long long 으로 바꾸었더니 AC를 받았는데요.

질문은

조건에서 N,M 이 20억이하라는 조건이 있기 때문에 int 형을 썼습니다.

그리고 for문에서는 각각 범위가 i<=N, i<=M-N, i<=M 인데

결국 i 는 int 범위를 초과하지 않는건데 왜 이런 문제가 발생하는 건가요?

Green55   2년 전

i가 INT_MAX/2 보다 클 때 2가 곱해져 오버플로우가 되는 케이스가 생길 수 있습니다.

his130   2년 전

아..! for문으로 들어오지 않더라도 일단 곱해져서 오버플로우가 생긴다는 말씀이시죠??

Green55   2년 전

i가 오버플로우가 되면, 음수가 되는 등 20억보다 작은 숫자가 될 확률이 크겠죠. 따라서 for문을 아예 벗어나지 못할 확률도 큽니다.

실제로 아래 코드를 돌려보면 다음과 같은 결과가 나옵니다

2
4
8
...
536870912 1073741824 -2147483648 0 0 0 ...


his130   2년 전

아 그렇군요 너무 감사합니다!

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