Programmers_JAVA_옹알이
문제 설명
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱이의 조카가 발음할 수 있는 단어의 개수를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ babbling의 길이 ≤ 100
- 1 ≤ babbling[i]의 길이 ≤ 15
- babbling의 원소에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
처음에는 이 문제를 aya, ye, woo, ma 이 네 개의 스트링이 존재하는 배열 요소의 개수만 출력하는 줄 알았다.
테스트를 해본 후에야 answer값이 높게 나와 문제를 잘못 이해했다는걸 알고 코드를 다시 짜 보았지만 이번에는 answer 값이 자꾸 0으로 나타났다.
이렇게 answer 값이 0이 나타나는 이유는 answer 복합대입연산자를 사용한 부분에서 new_String==""을 작성했기 때문이다.
문자열을 비교할 때는 스트링 객체의 메소드인 equals()를 사용해야 한다.
내가 사용한 방법은 for문으로 배열의 첫 번째 요소부터, 배열의 길이까지 반복문을 실행한다.
새로운 스트링 객체를 만들고, 요소들 중 aya, ye, woo, ma가 존재하는지 확인하고 replaceAll메소드를 사용해서 해당하는 문자열을 제거한 후, 만든 스트링 객체에 대입하였다.
다시 작성하니 결과가 올바르게 뜬다. 하지만 제출해 보니 에러 케이스 2개가 나타났는데, 이 이유는 예를들어 aywooa 라는 단어가 스트링 배열에 존재한다고 가정해 보자. replaceAll 스트링 메소드를 사용해서 woo를 제거한다고 하면, aya가 나타나는데 여기에서 replace로 aya단어도 사라지기 때문이다. 이 aya단어는 발음할 수 없는 ay?a 인 단어라서 제거되면 안된다.
그래서 생각해 낸 방법은 replaceAll 메소드를 사용할 때, 문자를 제거하는 것이 아닌 공백 문자를 대신 대입하는 방법이다.
공백 문자를 대신 대입하고 반복문이 종료되기 직전 똑같이 raplaceAll로 공백을 없애준 후에, equals 메소드를 사용하여 answer에 값을 더할 조건문을 만들어 주어야 한다.
아래는 완성한 코드이다.