강의

멘토링

로드맵

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

호프님의 프로필 이미지
호프

작성한 질문수

1-G 질문입니다.

작성

·

163

0

9996번 문제에서 따로 코드를 작성하여 제출하였으나 런타임에러(Out of range)가 발생하여 질문드립니다!

어떤 부분에서 오류가 발생한 건지 감이 잡히지 않아 이렇게 질문드렸습니다.

#include <iostream>
#include <vector>

using namespace std;

int n, pos;
string pattern;
string s;
vector<string> input;
pair<string, string> key;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> n;
	cin >> pattern;

	for (int i = 0; i < n; i++) {
		cin >> s;
		input.push_back(s);
	}

	pos = pattern.find('*');
	key.first = pattern.substr(0, pos);
	key.second = pattern.substr(pos+1);

	for (int i = 0; i < input.size(); i++)
	{
		string temp1, temp2;
		temp1 = input[i].substr(0, key.first.length());
		temp2 = input[i].substr(input[i].length() - key.second.length(), input[i].length());
		
		if (key.first == temp1 && key.second == temp2)
			cout << "DA\n";
		else
			cout << "NE\n";
	}

	return 0;
}

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

이 코드의 런타임 에러는 벡터 input에 문자열 s를 저장할 때 발생하는 것 같습니다. 만약 문제의 입력 크기인 n보다 더 많은 문자열을 입력으로 받는다면 벡터의 범위를 벗어나게 되어 예외가 발생할 수 있습니다.

이런 경우에는 다음과 같은 방법으로 코드를 수정할 수 있습니다:
1. 반복문 시작 전에 input 벡터의 크기를 n으로 미리 지정해줍니다.
2. 벡터의 크기가 n인지 확인하면서 입력을 받습니다.

수정된 코드는 다음과 같습니다.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n, pos;
    string pattern;
    string s;
    vector<string> input(n);
    pair<string, string> key;

    cin >> n;
    cin >> pattern;

    for (int i = 0; i < n; i++)
    {
        cin >> s;
        input.push_back(s);
    }

    pos = pattern.find('*');
    key.first = pattern.substr(0, pos);
    key.second = pattern.substr(pos + 1);

    for (int i = 0; i < n; i++)
    {
        string temp1, temp2;
        temp1 = input[i].substr(0, key.first.length());
        temp2 = input[i].substr(input[i].length() - key.second.length(), input[i].length());

        if (key.first == temp1 && key.second == temp2)
            cout << "DA\n";
        else
            cout << "NE\n";
    }

    return 0;
}

이렇게 코드를 수정하면 런타임 에러가 발생하지 않을 것입니다. 올바르게 수정된 코드를 다시 실행해보세요! 어떤 에러가 발생하거나 추가로 궁금한 점이 있으면 말씀해주세요.

호프님의 프로필 이미지
호프

작성한 질문수

질문하기