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

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

댓글

이 블로그의 인기 게시물

[PS] BOJ 20543번 폭탄 던지는 태영이

프로그래밍에서 실수형의 부정확성

프로그래머스 2019 윈터코딩 온라인 테스트를 보았다. (풀이)