WITHDRAWAL (수강철회) 풀다가 같은동작을하는 for을 두가지경우 i++과 i--의 코드로했는데 i--은 런타임에러나는이유가 뭘까요? ncoder //1)for(int i=D.size()-k;i<=D.size()-1;i++) // sum+=D[i]; //2) for(int i=D.size()-1;i>=D.size()-k;i--) // sum+=D[i]; 여기서 1)의코드로 짜면 정답 2)의 코드로 짜면 런타임에러 가 납니다 2)의 코드에 조건부 부분에 && i>=0 을 추가하면 정답이 됩니다 두개의 코드가 다른 경우가 있을까요? 8년 전
1개의 댓글이 있습니다. kcm1700 일단 코드를 보니 D.size()가 1과 k 사이에 있다는 보장이 있는 것 같으니 그 부분은 문제 없다고 넘어가볼게요. D.size()는 부호가 없는 정수 타입이고, C/C++의 캐스팅 규칙에 의해 D.size()-k와 i가 모두 부호가 없는 타입으로 바뀌어 비교를 하게 될 수 있어요. i가 음수가 되면 unsigned로 캐스팅 될 때 매우 큰 수처럼 동작하겠죠 8년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
ncoder
//1)for(int i=D.size()-k;i<=D.size()-1;i++)
// sum+=D[i];
//2) for(int i=D.size()-1;i>=D.size()-k;i--)
// sum+=D[i];
여기서 1)의코드로 짜면 정답
2)의 코드로 짜면 런타임에러 가 납니다
2)의 코드에 조건부 부분에 && i>=0 을 추가하면 정답이
됩니다
두개의 코드가 다른 경우가 있을까요?
8년 전