배열의 인덱스 범위부터 먼저 처리하기 : 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) 인접한 두 조건을 모두 만족시켜야 하기 때문에

앞에서 하나라도 거짓인 명제를 만나면, 뒤를 볼 필요없이 빠져나오게 되기 때문이다.

댓글

이 블로그의 인기 게시물

[C++] bool을 담은 vector가 foreach에서 동작하지 않는 이유

비트 연산에 대한 간단한 활용

Hash Table의 의미와 중요성