강의

멘토링

커뮤니티

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

lll님의 프로필 이미지
lll

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

1-G

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

큰돌님의 프로필 이미지
큰돌
지식공유자

temp reverse는 왜 하시나요? 

lll님의 프로필 이미지
lll
질문자

예를 들어서 

huh*tan
huhovdsvastan

이 있다면 앞쪽에서 huh의 위치를 0 으로 찾고

둘다 reverse 해서 nat 의 위치도 0으로 찾기 위함입니다

큰돌님의 프로필 이미지
큰돌
지식공유자

굉장히 좋은 코드네요. find로 첫번째부터 시작해서 찾으면 0이 뜨니 그걸 기반으로. size도 훌륭하구요.

근데 저 잘못된 점 찾았어요. 아래의 코드요. 이걸 계속해서 반복해서 reverse를 하게 되면 문제가 되지 않을까요? ab가 ba되었다가 ab되었다가 이렇게 될텐데요?

 


        reverse(sp[1].begin(), sp[1].end());
lll님의 프로필 이미지
lll
질문자

아하 저걸 반복문 안에 넣어놔서 문제가 생겼던거군요 ... 한참 고민하고있었는데 정말 감사합니다 ㅠㅠㅠ 강의도 너무 잘듣고있습니다 사랑합니다

큰돌님의 프로필 이미지
큰돌
지식공유자

저도 사랑해요ㅋㅋㅋㅋ 열공입니다.

lll님의 프로필 이미지
lll

작성한 질문수

질문하기