프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제

제출한 코드
1. 문자 비교
import java.util.List;
import java.util.ArrayList;
class Solution {
public int solution(String[] babbling) {
int count = 0;
List<String> list = new ArrayList<>();
list.add("aya"); list.add("ye"); list.add("woo"); list.add("ma");
for (String s : babbling) {
StringBuilder sb = new StringBuilder();
String last = "last";
for (char c : s.toCharArray()) {
sb.append(c);
if (list.contains(sb.toString())) {
if (sb.toString().equals(last)) break;
last = sb.toString();
sb.delete(0, sb.length());
}
}
if (sb.length() == 0) count++;
}
return count;
}
}
2. 정규식 사용
class Solution {
public int solution(String[] babbling) {
int count = 0;
for (String s : babbling) {
s = s.replaceAll("ayaaya|yeye|woowoo|mama", "1");
s = s.replaceAll("aya|ye|woo|ma", "");
if (s.length() == 0) count++;
}
return count;
}
}
풀이
1번 코드는 제일 처음에 제출한 코드이다.
리스트 안에 네 가지 발음을 넣고, for문을 통해 글자 하나씩 비교하면서 StringBuilder에 append 한 후, 만약 StringBuilder에 있는 문자열이 list 안에 존재한다면, StringBuilder 내용을 지우는 방식으로 하여, 마지막에 sb의 길이가 0이라면 count를 1 증가하는 방식으로 구현했었다.
제출한 후 다른 사람의 코드를 살펴 보았더니 정규식으로 간결하게 해결한 코드가 있었다.
replaceAll() 를 사용해서 간단하게 풀 수도 있었다.
연속된 발음이 s에 있다면 1로 치환한 후,
해당 발음이 s에 남아 있다면 빈 문자("")로 치환하도록 했다.
이후 s의 길이가 0이라면 발음이 가능한 문자열이므로 count에 1을 증가시켰다.
'프로그래머스' 카테고리의 다른 글
| [프로그래머스] 42862번 - 체육복 [Java] (0) | 2026.06.09 |
|---|---|
| [프로그래머스] 131128번 - 숫자 짝꿍 [Java] (0) | 2026.06.08 |
| [프로그래머스] 77484번 - 로또의 최고 순위와 최저 순위 [Java] (0) | 2026.06.04 |
| [프로그래머스] 136798번 - 기사단원의 무기 [Java] (0) | 2026.06.02 |
| [프로그래머스] 159994번 - 카드 뭉치 [Java] (0) | 2026.05.22 |