인프런 커뮤니티 질문&답변
split을 이용한 풀이법 질문입니다
해결된 질문
작성
·
314
0
#include <bits/stdc++.h>
using namespace std;
vector<string> split(string input, string delimeter)
{
vector<string> ret;
long long pos = 0;
while ((pos = input.find(delimeter)) != string::npos)
{
string token = input.substr(0, pos);
ret.push_back(token);
input.erase(0, pos + delimeter.length());
}
ret.push_back(input);
return ret;
}
int main()
{
// freopen("input.txt", "r", stdin);
int n;
string input;
cin >> n >> input;
string deli = "*";
vector<string> sp = split(input, deli);
for (int i = 0; i < n; i++)
{
string temp;
cin >> temp;
int firstFind = temp.find(sp[0]);
reverse(temp.begin(), temp.end());
reverse(sp[1].begin(), sp[1].end());
int secondFind = temp.find(sp[1]);
bool size = (temp.length() >= input.length() - 1);
if (!firstFind && !secondFind && size)
{
cout << "DA\n";
}
else
cout << "NE\n";
}
return 0;
}
교안에 split이 있길래 활용하고 싶었는데 이 방법으로 하면 틀립니다 .. 질문게시판에 있는 반례는 다 통과했는데 왜 그런지 알 수 있을까요..?
답변 1
0
큰돌
지식공유자
굉장히 좋은 코드네요. find로 첫번째부터 시작해서 찾으면 0이 뜨니 그걸 기반으로. size도 훌륭하구요.
근데 저 잘못된 점 찾았어요. 아래의 코드요. 이걸 계속해서 반복해서 reverse를 하게 되면 문제가 되지 않을까요? ab가 ba되었다가 ab되었다가 이렇게 될텐데요?
reverse(sp[1].begin(), sp[1].end());





예를 들어서
이 있다면 앞쪽에서 huh의 위치를 0 으로 찾고
둘다 reverse 해서 nat 의 위치도 0으로 찾기 위함입니다