💡풀이
import java.util.Arrays;
class Solution {
public int solution(String[] babbling) {
// 발음할 수 있는 단어 목록
String[] canBabbles = {"aya", "ye", "woo", "ma"};
for (int i = 0; i < babbling.length; i++) {
while (true) {
String match = "";
// 발음 가능한 단어로 시작하는지 확인
for (String canBabble : canBabbles) {
if (babbling[i].startsWith(canBabble)) {
match = canBabble; // 일치하는 단어를 찾으면 저장 후 종료
break;
}
}
// 1. 더 이상 일치하는 발음이 없으면 다음 단어로 이동
if (match.isEmpty()) {
break;
}
// 2. 연속으로 같은 발음을 하는 경우(예: "yeye")는 불가능하므로 중단
if (babbling[i].substring(match.length()).startsWith(match)) {
break;
}
// 일치하는 발음을 단어에서 제거 (문자열을 잘라냄)
babbling[i] = babbling[i].substring(match.length());
}
}
// 빈 문자열이 된 단어(완전히 발음 가능한 단어)의 개수를 반환
return (int) Arrays.stream(babbling)
.filter(String::isEmpty)
.count();
}
}
💡풀이 2
- 두번 연속으로 발음하는 케이스를 먼저 체크하고 반복문 순회하기
import java.util.Arrays;
class Solution {
public int solution(String[] babbling) {
String[] speak = {"aya", "ye", "woo", "ma"};
String[] speakTwoTime = {"ayaaya", "yeye", "woowoo", "mama"};
A: for (int i = 0; i < babbling.length; i++) {
// 두번 연속으로 발음하는 경우 체크
for (String s : speakTwoTime) {
if (babbling[i].contains(s)) {
continue A;
}
}
for (String s : speak) {
// 공백(" ")으로 변환하여 단어 삭제로 인해 새로운 문자가 생성되지 않도록 주의
babbling[i] = babbling[i].replace(s, " ");
}
}
return (int) Arrays.stream(babbling)
.filter(String::isBlank).count();
}
}
📖새로 배운 부분
1️⃣replace 시 공백(" ") 으로 변환한 이유
의도치 않은 문자열 결합 방지
- replace(word, "")는 단어를 제거한 후, 남은 문자열 조각들을 합쳐버립니다.
이 과정에서 원래는 없었던 새로운 유효 단어가 생성될 수 있습니다.
예시: "wyeoo"에서 "ye"를 제거하면 "woo"가 되어버립니다.
2️⃣replace 랑 replaceAll 둘다 모두 변경하는데 똑같은거아니야?
- 결론부터 말씀드리면, replaceAll()은 정규표현식(Regex)을 사용하고, replace()는 일반 문자열(Literal String)을 사용합니다.
String str = "hello.world";
'.'을 일반 문자로 인식
String result1 = str.replace(".", "!"); // "hello!world"
'.'을 '임의의 한 글자'라는 패턴으로 인식
String result2 = str.replaceAll(".", "!"); // 결과: "!!!!!!!!!!!"
정규식에서 특수문자를 일반문자로 쓰려면 이스케이프(\\) 해야 함
String result3 = str.replaceAll("\\.", "!"); // 결과: "hello!world"
replace : 바꾸려는 대상이 고정된 문자열일 때 (예: "apple", " ", "\n")
replaceAll : 패턴으로 문자를 찾고 싶을 때 (예: "[0-9]" "[^p]" 등등)
상황에 따라서 사용하도록 합시다!!
GitHub - okjunghyeon/Programmers_CodingTest: 프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다.
프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다. Contribute to okjunghyeon/Programmers_CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스, Java][PCCE 기출문제] 9번 / 지폐 접기 (0) | 2025.07.18 |
---|---|
[프로그래머스, Java] 실패율 (0) | 2025.07.18 |
[프로그래머스, Java] 소수 만들기 (0) | 2025.07.18 |
[프로그래머스, Java] 소수 찾기 (0) | 2025.07.18 |
[프로그래머스, Java] 과일 장수 (0) | 2025.07.18 |