문제: https://school.programmers.co.kr/learn/courses/30/lessons/133499
1. 코드
import java.util.*;
class Solution {
public int solution(String[] babbling) {
int answer = 0;
String[] list = {"aya", "ye", "woo", "ma"};
for(String s : babbling) {
StringBuilder sb = new StringBuilder();
int lastIndex = -1;
for(char c : s.toCharArray()) {
sb.append(c);
for(int i = 0; i < 4; i++) {
if(i != lastIndex && list[i].equals(sb.toString())) {
sb.delete(0, sb.toString().length());
lastIndex = i;
}
}
}
if(sb.toString().isBlank())
answer++;
}
return answer;
}
}
2. 설명
우선 예제를 자세히 살펴보고 문제를 이해하여야 하는데
- "aya", "ye", "woo", "ma" 총 4가지 발음이 가능하다.
- 위 4가지 문장의 조합으로 이루어져야한다.
- 같은 문장을 연속으로 이어지는 것은 안된다.
위 3가지 조건을 지켜야 조카가 발음할 수 있는 단어로 취급됩니다.
int answer = 0;
String[] list = {"aya", "ye", "woo", "ma"};
단어의 수를 answer, list에는 조카가 발음할 수 있는 4가지로 초기화합니다.
for(String s : babbling) {
StringBuilder sb = new StringBuilder();
int lastIndex = -1;
for(char c : s.toCharArray()) {
sb.append(c);
for(int i = 0; i < 4; i++) {
if(i != lastIndex && list[i].equals(sb.toString())) {
sb.delete(0, sb.toString().length());
lastIndex = i;
}
}
}
if(sb.toString().isBlank())
answer++;
}
문제를 해결하기 위해서 StringBuilder로 babbling의 문장을 다루며 lastIndex에는 마지막에 어떤 옹알이를 했는지 알기 위함입니다. 만약 마지막으로 발음하지 않은 발음을 정확하게 했다면 StringBuilder에서 제거시키고 lastIndex에 list의 index를 저장합니다. babbling에서 하나의 문장을 전부 읽으면 Stringbuilder에 문장이 남아있지 않다면 조카가 발음할 수 있는 단어이기에 answer를 1 증가시킵니다.
3. 정리
- 옹알이의 조건 파악하여 StringBuilder 사용하여 해결
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 42576번: 완주하지 못한 선수 (0) | 2023.08.07 |
---|---|
프로그래머스 - 42862번: 체육복 [Java] (0) | 2023.08.06 |
프로그래머스 - 131128번: 숫자 짝궁 [Java] (0) | 2023.08.04 |
프로그래머스 - 77484번: 로또의 최고 순위와 최저 순위 [Java] (0) | 2023.08.03 |
프로그래머스 - 17682번: [1차] 다트 게임 [Java] (0) | 2023.08.02 |