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