vector에 할당된 범위를 벗어난 인덱스를 [] 연산자로 참조하는 것은 undefined behavior입니다. 즉, 무슨 일이 일어나도 이상하지 않습니다.
[] 연산자는 그냥 단순히 배열의 시작 주소로부터 주어진 거리만큼 떨어진 메모리 위치를 참조하는 것이기 때문에 그 위치에 정답을 변하지 않게 할 값이 들어있었다면 그대로 정답이 출력되는 것도 이상하지 않습니다. 메모리는 실제로는 요청된 것보다 더 큰 단위로 할당되기 때문에 인덱스를 1 정도 벗어난다고 해서 꼭 런타임 에러가 되는 것도 아닙니다.
wrllrw 5년 전
저는 이 예제를
Two pointer 알고리즘으로 풀며, left와 right를 0~9(N-1) 까지로 설정했습니다.
채점 번호 10241282입니다.
여기서
right = 8, left = 6일 경우
-> right = 9, left = 6
-> right = 9, left = 7
-> right가 10이되며 == N이 됐기 때문에 break를 해야 하는데, 저는 그런 설정을 안 했는데도 정답으로 채점됐습니다.
원래대로라면 vector를 N크기만큼 설정했기 때문에 0~9까지만 참조해야 하는 상황에서 vec[N]을 참조해도 문제가 되지 않았습니다.
즉, 이런 테스트 케이스가 없던 것입니다.
이 소스 코드를 개선한 게
채점 번호 10241860의 33번째 줄이고, 위에서 언급한 사례가 걸러내져야 한다고 생각합니다.