Level 0. 세 개의 구분자
C스타일 strtok() 함수를 이용해 해결했는데, 쓸데없이 번거롭게 푼 것 같다.
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
vector<string> solution(string myStr)
{
vector<string> answer;
const char *str = myStr.c_str(), *delim = "abc";
char *s = new char[strlen(str) + 1], *p;
copy(str, str + strlen(str) + 1, s);
p = strtok(s, delim);
while (p)
{
answer.emplace_back(p);
p = strtok(nullptr, delim);
}
delete s;
return answer.empty() ? vector<string>{"EMPTY"} : answer;
}
find_first_not_of() 함수와 find_first_of() 함수로 부분 문자열의 시작과 끝 부분 구분자의 위치를 찾아 해결했다.
#include <iostream>
#include <vector>
using namespace std;
vector<string> solution(string myStr)
{
vector<string> answer;
size_t last = 0;
do
{
size_t first = myStr.find_first_not_of("abc", last);
last = myStr.find_first_of("abc", first);
if (first != string::npos)
answer.emplace_back(myStr.substr(first, last - first));
}
while (last != string::npos);
return answer.empty() ? vector<string>{"EMPTY"} : answer;
}
a, b, c 구분자를 모두 공백으로 변경한 후, istringstream을 통해 해결해도 된다.
#include <iostream>
#include <vector>
#include <regex>
#include <sstream>
using namespace std;
vector<string> solution(string myStr)
{
vector<string> answer;
string s = regex_replace(myStr, regex("[a, b, c]"), " ");
istringstream iss(s);
while (iss >> s)
answer.emplace_back(s);
return answer.empty() ? vector<string>{"EMPTY"} : answer;
}
'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 0. 배열 조각하기 (0) | 2023.05.06 |
---|---|
Level 0. 주사위 게임 3 (0) | 2023.05.06 |
Level 0. 문자열 여러 번 뒤집기 (0) | 2023.05.05 |
Level 0. 전국 대회 선발 고사 (0) | 2023.05.04 |
Level 0. 빈 배열에 추가, 삭제하기 (0) | 2023.05.04 |