-
[Algorithm] 프로그래머스 옹알이 - C++쾌락없는 책임 (공부)/알고리즘 문제풀이 2022. 10. 13. 15:06반응형
#include <string> #include <vector> using namespace std; std::string ReplaceAll(std::string &str, const std::string& from, const std::string& to){ size_t start_pos = 0; while((start_pos = str.find(from, start_pos)) != std::string::npos) { str.replace(start_pos, from.length(), to); start_pos += to.length() + 1; } return str; } int solution(vector<string> babbling) { int answer = 0; vector<string> canTalk = {"aya", "ye", "woo", "ma"}; for(auto& word : babbling){ for(const auto& can : canTalk){ ReplaceAll(word, can, ""); } if(word.length()) continue; answer++; } return answer; }
알고리즘 자체는 별거 없었습니다. 총 문자의 길이가 300이고 비교군이 4개라 시간적 여유가 크기에 '각 단어를 순회하면서 말할 수 있는 단어를 제거한 뒤 마지막 문자열 길이가 0인 경우 answer++' 을 해주면 됩니다.
다만 문제 풀이를 하면서 C++에서는 걱정을 해야 하는게 'replace_all' 같은 함수는 없다는 점입니다. 그래서 replace 해주는걸 따로 만들어야 할 필요가 있는데 아래 코드가 흔히 인터넷에서 찾을 수 있는 ReplaceAll 함수입니다.
std::string ReplaceAll(std::string &str, const std::string& from, const std::string& to){ size_t start_pos = 0; while((start_pos = str.find(from, start_pos)) != std::string::npos) { str.replace(start_pos, from.length(), to); start_pos += to.length(); } return str; }
다만 여기서 문제는 아기가 같은 단어를 연속으로 이야기할 수 없다고 했으니 +1을 해주고 풀이를 해야 합니다. 실제 위 코드를 보면 start_pos += to.length() + 1로 처리를 해 줬는데 연속된 단어를 찾는걸 방지해주는 역할입니다.
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
[Algorithm] 백준 14500 테트로미노 - C++, DFS (0) 2022.10.21 [Algorithm] 프로그래머스 게임 맵 최단거리 - C++, BFS (0) 2022.10.13 [Algorithm] 백준 2468 안전 영역 - C++, DFS, BFS (1) 2022.10.11 [Algorithm] 프로그래머스 할인행사 - C++, unordered_map (0) 2022.10.11 [Algorithm] 백준 16929 Two Dots - C++, DFS (0) 2022.10.06