문제 링크
난이도 : 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_list | ex | result |
---|---|---|
[“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에 바로 문자열 넣을 수 있는거 몰랐다..