WITHDRAWAL (수강철회) 풀다가 같은동작을하는 for을 두가지경우 i++과 i--의 코드로했는데 i--은 런타임에러나는이유가 뭘까요?

  • ncoder
    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 을 추가하면 정답이
    됩니다
    두개의 코드가 다른 경우가 있을까요?


    7년 전
1개의 댓글이 있습니다.
  • kcm1700
    kcm1700

    일단 코드를 보니 D.size()가 1과 k 사이에 있다는 보장이 있는 것 같으니 그 부분은 문제 없다고 넘어가볼게요.

    D.size()는 부호가 없는 정수 타입이고, C/C++의 캐스팅 규칙에 의해 D.size()-k와 i가 모두 부호가 없는 타입으로 바뀌어 비교를 하게 될 수 있어요. i가 음수가 되면 unsigned로 캐스팅 될 때 매우 큰 수처럼 동작하겠죠


    7년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.