배열의 인덱스 범위부터 먼저 처리하기 : out of range
예를 들어서,
while (arrSum[end] - arrSum[start - 1] < s) end++; 라는 코드가 있다고 하자.
반복문 안에서 end를 증가시키기 때문에, 배열의 범위를 벗어나지 않는 선에서 검사해야 한다.
인덱스에 대한 처리를 while 내부에 쓰거나, while의 조건문에 쓰는 방법 등이 있지만
아래처럼 범위를 검사하는 부분을 가장 먼저 쓰면 좋다.
while (end < n && arrSum[end] - arrSum[start - 1] < s)
end++;
이렇게 하면, if 문의 뒷 부분(arrSum[end] - arrSum[start - 1] < s)을 검사하기 이전에
앞 부분(end < n)을 검사하고 빠져나오게 된다.
왜냐하면, and 조건은 if (true && true) 인접한 두 조건을 모두 만족시켜야 하기 때문에
앞에서 하나라도 거짓인 명제를 만나면, 뒤를 볼 필요없이 빠져나오게 되기 때문이다.
댓글
댓글 쓰기