벡터 알고리즘 문제를 푸는데 궁금한점이 있습니다.

vector<int> versus(vector<int> w) {
	vector<int> answer;
	int size = w.size();
	answer = w;

	while (answer.size() > 4) {
		answer.clear();
		
		for (int i = 0; i < w.size(); i += 2) {
			if (w.at(i) > w.at(i + 1)) {
				answer.push_back(i);
				size--;
			}
			else if (w.at(i) < w.at(i + 1)) {
				answer.push_back(i+1);
				size--;
			}
			else {
				answer.push_back(i);
				size--;
			}
		}
		answer.resize(size);
	}

	return answer;
}

int main() {

	vector<int> pp = { 3,2,4,5,6,2,4,5 };

	for (int i = 0; i < versus(pp).size(); i++) {
		printf("%d ", versus(pp).at(i));
	}

	return 0;
}

프로그래머스에서 문제를 풀어봤는데

비쥬얼스튜디오에선 문제없이 프로그래머스에서 원하는 예제와

결과 모두 잘 나왔습니다.

그런데 프로그래머스에선 벡터 aborted 문제가 뜨면서

오류로 아예 실행조차 안되더라구요

개인적으로 의심 가는건

벡터 clear 해주는곳과 while 반복문 마지막에

벡터 resize 해주는 부분이 의심스럽긴한데

왜 비주얼 스튜디오에선 문제나 경고도 안뜨면서 잘되는데

프로그래머스에선 안되는걸까요?

W.at(i+1)이란 코드에서 버퍼 오버플로우가 발생했고, 프로그래머스 내부 채점프로그램에서 해당 버그를 디텍팅할 수 있도록 한거같네요.

예를들어 최초에 사이즈가 1인 벡터가 들어가써 at.(1)을 한 경우가 있을 수 있겠네요

Vs에서라면… 아마 디버그모드에선 잡지않을까 싶고 릴리즈에선 넘어갈거같네요 ‘^’

다시해보니 벡터 크기 관련해서 문제가 맞았습니다. 참 어렵네요