알고리즘
[프로그래머스] 옹알이2
winwin-k9
2023. 6. 26. 02:42
문제
머쓱이는 태어난 지 11개월 된 조카를 돌보고 있습니다.
조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음과 네 가지 발음을 조합해서 만들 수 있는 발음밖에 하지 못하고 연속해서 같은 발음을 하는 것을 어려워합니다.
문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
풀이
문자열을 대체하는 방법으로 풀이하였다.
원래는 문자열을 지우는 방식으로 코드를 짰었다.
그러나 yayae
와 같은 문자가 있다고 하면 먼저 aya를 삭제하면 앞의 y와 뒤의 e가 붙어버려서 ye 가 되기 때문에 또 가능한 언어가 된다.
따라서 삭제가 아니라.
으로 대체하는 방법을 사용했다.
또한 check하는 부분에서 한번 문자를 삭제한 후 위에 또 같은 word가 가능할 수 있기 때문에 i--를 함으로써 뒤에 있는 부분까지 대체가 가능하도록 했다.
반례를 찾느라 꽤나 고생을 했다.
반례를 찾는 연습을 더 해야 겠다.
import java.util.*;
import java.lang.*;
class Solution {
static String[] words = {"aya", "ye", "woo", "ma"};
static String[] duplicatedWords = {"ayaaya", "yeye", "woowoo", "mama"};
public int solution(String[] babbling) {
int answer = 0;
for(int i = 0; i < babbling.length; i++) {
StringBuilder str = new StringBuilder(babbling[i]);
if(duplicatedCheck(str)) {
continue;
}
if (check(str)) {
answer++;
}
}
return answer;
}
static boolean check(StringBuilder str) {
for(int i = 0; i < 4; i++) {
int index = str.indexOf(words[i]);
if (index == -1) {
continue;
}
str.replace(index, index + words[i].length(), ".");
i--;
}
for(int i = 0; i < str.length(); i++) {
if (!str.substring(i, i + 1).equals(".")) {
return false;
}
}
return true;
}
static boolean duplicatedCheck(StringBuilder str) {
for(int i = 0; i < 4; i++) {
if ((str.toString()).contains(duplicatedWords[i])) {
return true;
}
}
return false;
}
}
https://github.com/Win-9/Algorism/tree/main/programers/%EC%98%B9%EC%95%8C%EC%9D%B4(2)
728x90