인프런 커뮤니티 질문&답변

코끼리님의 프로필 이미지
코끼리

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

39. 두 배열 합치기(병합정렬 예비학습)

채점프로그램 구동 문제

작성

·

462

·

수정됨

0

안녕하세요 수업 열심히 듣고 따라가는 학생입니다!

37번 문항에 질문 및 문제가 생겨 문의드립니다.

 

아래와 같은 코드를 작성했고, 이를 실행 후 채점폴더를 활용해 채점했을때 test 3,4,5번에서 exit_code 에러가 발생합니다.

#include <iostream>
using namespace std;
int scan(int n, int* arr, int len);
int main() {
	int S;
	int N;
	int scanres;
	cin >> S >> N;
	int* cache = new int[S]();
	int* work = new int[N];
	for(int i = 0; i<N; i++){
		cin >> work[i];
	}
	
	cache[0] = work[0];
	for(int i = 1; i<N; i++){
		scanres = scan(work[i], cache, S);
		if(scanres != -1){
			//캐시에 있다
			for(int j = scanres - 1; j >= 0; j--){
				cache[j+1] = cache[j];
			}
			cache[0] = work[i];
		}
		else{
			//캐시에 없다
			for(int j = S-1; j >= 0; j--){
				cache[j+1] = cache[j];
			}
			cache[0] = work[i];
		}
	}
	
	for(int i = 0; i<S; i++){
		cout << cache[i] << " ";
	}
	return 0;
}

int scan(int n, int* arr, int len){
	for(int i = 0; i < len; i++){
		if(arr[i] == n)
			return i;
	}
	return -1;
}

아무리 봐도 문제를 모르겠어 input 3,4,5를 열고 제 코드에 대입해 실행해본 결과 output 3,4,5와 일치하는 결과가 출력되었습니다.

아래 그림에서 왼쪽은 채점프로그램 점수이고, 오른쪽 위는 input 3 프로그램 실행시 결과, 그 아래는 output 3 파일입니다. input3 실행결과와 output3 결과가 일치하는것을 확인하실 수 있습니다.

어느부분에서 에러가 나는 것인지 조언 부탁드리겠습니다.

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

캐시에 없을 때 index out of range 에러가 납니다. C++이 index out of range 에러를 그냥 넘어가서 그렇지 다른 언어였다면 에러가 나는 코드입니다.

for(int j = S-1; j >= 1; j--){
	cache[j] = cache[j-1];
}

위와 같이 고치면 됩니다.

 

코끼리님의 프로필 이미지
코끼리

작성한 질문수

질문하기