문제 링크
난이도 : Lv. 0

문제 내용

문제 설명

문자열들이 담긴 리스트가 주어졌을 때, 모든 문자열들을 순서대로 합친 문자열을 꼬리 문자열이라고 합니다. 꼬리 문자열을 만들 때 특정 문자열을 포함한 문자열은 제외시키려고 합니다. 예를 들어 문자열 리스트 [“abc”, “def”, “ghi”]가 있고 문자열 “ef”를 포함한 문자열은 제외하고 꼬리 문자열을 만들면 “abcghi”가 됩니다.

문자열 리스트 str_list와 제외하려는 문자열 ex가 주어질 때, str_list에서 ex를 포함한 문자열을 제외하고 만든 꼬리 문자열을 return하도록 solution 함수를 완성해주세요.


제한사항
  • 2 ≤ str_list의 길이 ≤ 10
  • 1 ≤ str_list의 원소의 길이 ≤ 10
  • 1 ≤ ex의 길이 ≤ 5

입출력 예
str_listexresult
[“abc”, “def”, “ghi”]“ef""abcghi”
[“abc”, “bbc”, “cbc”]“c"""

입출력 예 설명

입출력 예 #1

  • 본문과 동일합니다.

입출력 예 #2

  • 리스트 안의 모든 문자열이 “c”를 포함하므로 빈 문자열을 return합니다

문제 분석

부분 문자열 있으면 pass

작성한 코드

#include <string>
#include <vector>
 
using namespace std;
 
string solution(vector<string> str_list, string ex) {
    string answer = "";
    for(auto &s : str_list) {
        if(s.size() < ex.size()) {
            answer.append(s);
            continue;
        }
        bool flag = false;
        for(int i = 0; i < s.size() - ex.size() + 1 ; i++) {
            if(s[i] == ex[0]) {
                if(s.substr(i, ex.size()) == ex) {
                    flag = true;
                    break;
                }
            }
        }
        if(!flag) answer.append(s);
    }
    return answer;
}

처음에 s 사이즈 체크 안해서 자꾸 core dump 됨.. 조건 체크 늘 잘 하자..

우수 코드 분석

#include <string>
#include <vector>
using namespace std;
 
string solution(vector<string> str_list, string ex) {
    string answer = "";
 
    for(const auto& s : str_list)
    {
        if(s.find(ex) == string::npos)
        {
            answer += s;
        }
    }
 
    return answer;
}

find에 바로 문자열 넣을 수 있는거 몰랐다..