작성
·
135
0
안녕하세요..
제가 이문제를 다시 푸는 과정에서
reverse함수를 사용해서
풀어보았는데요
예제는 다 맞는데 왜틀리는지 모르겠습니다...
답변 부탁드립니다.
http://boj.kr/ee37f6b6daa14f158949673b90e65815
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<string> solution(const int N, const string& str, const vector<string>& v)
{
vector<string> answer;
size_t pos = str.find('*');
string pre = str.substr(0, pos);
string suf = str.substr(pos + 1);
reverse(suf.begin(), suf.end());
// cout << "pre = " << pre << ", suf = " << suf << '\n'; // test
for (const string& s : v)
{
string rs(s);
reverse(rs.begin(), rs.end());
if (s.find(pre) == 0 && rs.find(suf) == 0)
answer.push_back("DA");
else
answer.push_back("NE");
// cout << "str = " << s << "\nrstr = " << rs << '\n';
// cout << "answer = " << answer.back() << "\n\n";
}
return answer;
}
int main()
{
int N;
string str;
cin >> N >> str;
vector<string> arr(N);
for (string &s : arr)
cin >> s;
vector<string> answer = solution(N, str, arr);
for (string& s : answer)
cout << s << '\n';
return 0;
}
답변 2
0
안녕하세요 ㅎㅎ
이 반례를 해결하지 못합니다.
1 ab*ba aba
정답 : NE
수강생님 : DA
이부분에 관한 로직을 고쳐보시겠어요?
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다.
질문해주신 내용에서 reverse
함수를 사용하여 문제에 접근한 로직에 대해 궁금증을 가지고 계신 것으로 보입니다. 제공된 코드에서는 문자열의 접두사(prefix) 및 접미사(suffix) 검사를 위해 기본과 역순으로 문자열을 처리하고 있는데, 예제는 맞지만 특정 케이스에서 문제가 생길 것 같다고 우려하고 계시네요.
비슷한 상황에 대한 이전 질문 중 하나가 도움이 될 수 있을 것 같아 아래 링크를 첨부합니다:
질문하신 내용과 직접적으로 유사하지 않을 수도 있으나, 문자열의 패턴을 분석하고 검증하는 과정에서 발생할 수 있는 일반적인 실수나 고려해야 할 사항에 대한 힌트를 얻을 수 있을 것입니다.
추가로, 코드 내 reverse
함수를 사용하여 접미사를 뒤집고 검사하는 과정에서 예상치 못한 결과를 초래할 수 있는 부분이 있을 수 있으며, 이는 역순 문자열의 시작 부분과 접미사의 비교를 정확히 수행하고 있는지 다시 확인해볼 필요가 있습니다. 질문자님의 코드에서는 접미사를 뒤집은 후 원본 문자열도 뒤집어서 비교하는데, 이 과정에서 전체 길이를 고려한 조건 검사가 누락되었는지 다시 살펴보시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.