https://school.programmers.co.kr/learn/courses/30/lessons/133499
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
머쓱이의 조카는 다음 4가지 발음을 조합해 단어를 만들 수 있습니다:
- "aya", "ye", "woo", "ma"
단, 연속해서 같은 발음을 사용할 수는 없습니다. 예를 들어, "ayayaya"는 불가능합니다.
babbling 배열이 주어질 때, 조카가 발음할 수 있는 단어의 개수를 반환하는 함수를 구현해야 합니다.
풀이 방법
처음에는 babbling 배열을 순차적으로 순회하며, "aya", "ye", "woo", "ma" 각각의 발음을 찾고, 더 이상 발음할 수 없을 때까지 해당 발음을 탐색하고 제거하는 방식으로 해결하려 했습니다.
그러나 예외 케이스가 존재합니다. 예를 들어, ["yayae"]의 경우 "aya" 발음을 제거하면 문자열이 ["ye"]로 바뀝니다. 이는 조카가 발음할 수 있는 단어로 간주되지만, 실제로는 'y'와 'e'가 떨어져 있어 발음할 수 없는 단어입니다. 이러한 문제를 해결하기 위해 새로운 방법이 필요했습니다.
그래서 발음 가능한 단어를 찾았을 경우, 해당 단어를 "0"으로 대체하는 방식을 생각했습니다.
예를 들어, ["yayae"]에서 "aya"를 제거하면 ["y0e"]가 됩니다. 이 경우 남아있는 "y0e"는 발음 가능한 단어가 아니므로, 제대로 처리할 수 있습니다.
마지막으로 모든 문자가 "0"으로만 구성된 경우, 발음 가능한 단어로 간주해 횟수를 추가합니다.
또한, 조카는 연속된 동일 발음을 할 수 없습니다. 따라서 발음 가능한 단어를 찾았을 때, 해당 단어가 연속적으로 반복되는지 확인해야 합니다.
예를 들어, ["yeye"]에서 "ye"를 발음 가능하다고 판단한 뒤, 한 번 더 "yeye"라는 단어가 존재하는지 확인합니다.
연속된 발음이 존재한다면, 해당 단어는 발음 가능한 단어에서 제외합니다.
풀이 코드
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
//연속해서 같은 발음 불가
vector<string> can_pronounce = {"aya", "ye", "woo", "ma"};
int solution(vector<string> babbling) {
int answer = 0;
for(string s : babbling){
for(string word : can_pronounce){
int pos = 0;
while((pos = s.find(word)) != string::npos){
//같은발음 연속으로 발음해야하는 단어인지 확인
string tmp = word+word;
if(s.find(tmp) != string::npos) break;
s.replace(pos, word.length(),"0");
}
}
//문자열이 전부 "0"으로 이루어져 있다면 answer값 증가
bool check = true;
for(char c: s){
if(c != '0') check = false;
}
if(check)answer++;
}
return answer;
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Lv.2 영어 끝말잇기 c++ (0) | 2025.01.10 |
---|---|
[프로그래머스] Lv.0 이진수 더하기 c++ (0) | 2025.01.10 |
[프로그래머스] Lv.0 유한소수 판별하기 c++ (0) | 2025.01.09 |
[프로그래머스] Lv.3 금과 은 운반하기 c++ (0) | 2025.01.08 |
[프로그래머스] Lv.1 크기가 작은 부분 문자열 c++ (0) | 2025.01.07 |