머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다. 조카는 아직
"aya", "ye", "woo", "ma"
네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다. 문자열 배열babbling
이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
- 1 ≤
babbling
의 길이 ≤ 100- 1 ≤
babbling[i]
의 길이 ≤ 30- 문자열은 알파벳 소문자로만 이루어져 있습니다.
- 입출력 예 #1 :
["aya", "yee", "u", "maa"]
에서 발음할 수 있는 것은"aya"
뿐입니다. 따라서 1을 return합니다.
- 입출력 예 #2 :
["ayaye", "uuuma", "yeye", "yemawoo", "ayaayaa"]
에서 발음할 수 있는 것은"aya" + "ye" = "ayaye"
,"ye" + "ma" + "woo" = "yemawoo"
로 2개입니다. "yeye"는 같은 발음이 연속되므로 발음할 수 없습니다. 따라서 2를 return합니다.
네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어
"woowo"
는"woo"
는 발음할 수 있지만"wo"
를 발음할 수 없기 때문에 할 수 없는 발음입니다.
❌ 조카가 할 수 있는 발음을
baby
에 저장하고,babbling
의 각 요소가baby
내의 요소를 포함하고 있으면 해당 단어를 공백""
으로 바꿔주었다. 이 때, 연속된 발음은 할 수 없으므로 단어가 연속된 경우,replaceFirst()
를 사용하여 같은 단어의 첫 번째 요소만 공백으로 변환하였다.baby
의 모든 요소와 비교를 마친 후, 최종babbling[i]
가 공백이면 모두 발음할 수 있다는 의미이므로answer
를 1 증가시킨다.
아래 코드로 예제는 통과하였으나, 실제 제출에서는 절반 정도의 케이스만 통과하였다. 반례를 생각해보니ayawooaya
의 경우,aya
가 2개 있지만 연속되지 않았기 때문에 두aya
모두 발음할 수 있어야 하는데,replaceFirst()
에 의해 뒤의aya
가 공백으로 대체되지 않았다,,
class Solution {
public int solution(String[] babbling) {
String[] baby = {"aya", "ye", "woo", "ma"};
int answer = 0;
for(int i=0;i<babbling.length;i++) {
for(int j=0;j<baby.length;j++) {
babbling[i] = babbling[i].replaceFirst(baby[j], "");
}
if(babbling[i].equals("")) answer++;
}
return answer;
}
}
❌ 그냥 단순하게
babblin[i]
가 반복된 단어를 포함하지 않는 경우에만replace(baby, "")
를 수행하도록 조건문을 추가해줬다! 근데 해당 코드도 절반 정도의 케이스만 통과,, 심지어 전에 맞던 것도 틀림,,
울면서 반례를 또 찾아보니""
으로 대체해버리면 남은 단어들이 붙어서 기존에 없던baby
요소를 만들어 낼 수 있다고 한다,,
예를 들어ayamayaa
의 경우aya + ma + yaa
이므로 발음할 수 없는 단어이지만,aya
를""
로 대체하면aya/m/aya/a
가ma
가 되어ma
차례에서 해당 요소를baby
속 요소라 생각하여 공백으로 대체해버리면 결론적으로 발음할 수 있는 단어가 되어버린다,,!
...
for(int i=0;i<babbling.length;i++) {
for(int j=0;j<baby.length;j++) {
if(!babbling[i].contains("ayaaya") &&
!babbling[i].contains("yeye") &&
!babbling[i].contains("woowoo") &&
!babbling[i].contains("mama")) {
babbling[i] = babbling[i].replace(baby[j], "");
}
...
✅ 대체 후 단어들이 붙지 않게 하기 위해서,
""
대신" "
로 대체해주었다! 모든 대체가 끝난 후replace(" ", "")
를 통해" "
를""
로 대체하면, 단어들이 붙어도 대체 작업은 이미 끝났기 때문에 상관없다. 공백 대체 작업까지 끝낸 문자열이""
이면answer
를 증가시킨다.
for(int i=0;i<babbling.length;i++) {
for(int j=0;j<baby.length;j++) {
if(!babbling[i].contains("ayaaya") &&
!babbling[i].contains("yeye") &&
!babbling[i].contains("woowoo") &&
!babbling[i].contains("mama")) {
babbling[i] = babbling[i].replace(baby[j], " ");
}
}
if(babbling[i].replace(" ", "").equals("")) answer++;
}
...