문제 풀이 : 10분 05초
1. 문제 설명을 제대로 읽고 문제를 정의하기
2. 연속된 문자열을 split() 으로 처리시에 join(" ") 을 사용하여 명확히 문자를 분리
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
1 ≤ babbling의 길이 ≤ 100
1 ≤ babbling[i]의 길이 ≤ 30
문자열은 알파벳 소문자로만 이루어져 있습니다.
function solution(babbling) { // 1차 풀이 실패 : 연속 발음 불가 고려 X
const says = ["aya", "ye" , "woo", "ma"]; // 아이가 발음 할 수 있는 단어
const count = babbling.filter(say => { // 발음 조합
let tempSay = say;
for(const say of says){
// 단어 발음 제거
tempSay = tempSay.split(say).join(" ");
}
// 단어가 공백인지 확인
return tempSay.trim() === "";
}).length;
return count;
}
문제 제한 조건 중 연속된 발음에 대한 내용을 미처 생각하지 못하고 문제를 풀이하였습니다.
function solution(babbling) { // 1차 풀이 실패 : 연속 발음 불가 고려 X
const says = ["aya", "ye" , "woo", "ma"]; // 아이가 발음 할 수 있는 단어
const count = babbling.filter(say => { // 발음 조합
let tempSay = say;
for(const say of says){
// 연속 발음 불가
if(tempSay.includes(say.repeat(2))){
return false;
}
// 단어 발음 제거
tempSay = tempSay.split(say).join(" ");
}
// 단어가 공백인지 확인
return tempSay.trim() === "";
}).length;
return count;
}
해당 문제는 동일한 문자열들을 어떻게 효율적으로 제거하는게 핵심인 문제였습니다.
연속된 발음이 문자에 포함 여부를 확인하고, 발음 할 수 있는 단어를 순차적으로 제거하여 빈 문자열 여부를 판단하는 방식으로 문제를 해결했습니다.