| 문제 설명 ❓
머쓱이는 태어난 지 6개월 된 조카를 돌보고 있습니다. 조카는 아직 "aya", "ye", "woo", "ma" 네 가지 발음을 최대 한 번씩 사용해 조합한(이어 붙인) 발음밖에 하지 못합니다. 문자열 배열 babbling이 매개변수로 주어질 때, 머쓱히 의 조카가 발음할 수 있는 단어의 개수를 return 하도록 solution 함수를 완성해 주세요.
| 제한 사항 ❌
- 1 ≤ babbling의 길이 ≤ 100
- 1 ≤ babbling [i]의 길이 ≤ 15
- babbling의 각 문자열에서 "aya", "ye", "woo", "ma"는 각각 최대 한 번씩만 등장합니다.
- 즉, 각 문자열의 가능한 모든 부분 문자열 중에서 "aya", "ye", "woo", "ma"가 한 번씩만 등장합니다.
- 문자열은 알파벳 소문자로만 이루어져 있습니다.
| 입출력 예 💬
babbiling | result |
["aya", "yee", "u", "maa", "wyeoo"] | 1 |
["ayaye", "uuuma", "ye", "yemawoo", "ayaa"] | 3 |
| 입출력 예 설명 💬
입출력 예 #1
- ["aya", "yee", "u", "maa", "wyeoo"]에서 발음할 수 있는 것은 "aya"뿐입니다. 따라서 1을 return 합니다.
입출력 예 #2
- ["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]에서 발음할 수 있는 것은 "aya" + "ye" = "ayaye", "ye", "ye" + "ma" + "woo" = "yemawoo"로 3개입니다. 따라서 3을 return 합니다.
| 유의 사항⚠️
네 가지를 붙여 만들 수 있는 발음 이외에는 어떤 발음도 할 수 없는 것으로 규정합니다. 예를 들어 "woowo"는 "woo"는 발음할 수 있지만 "wo"를 발음할 수 없기 때문에 할 수 없는 발음입니다.
| 풀이 🔥
⚠️ 한 번씩 읽어주세요 ⚠️
제 개인의 풀이 방법이며 틀린 풀이 방법 일수도, 더 나은 풀이법이 존재할 수도 있습니다!
전체 코드는 깃헙 링크 혹은 하단 접은 글을 펼쳐 확인가능하며, 복붙이 아닌 참고용 코드입니다
처음 생각을 해보았을 때는 발음 가능한 배열과 일치하는 문자열을 없애는 과정을 반복한다면, 마지막 결과 문자열이 비어있다면, 만들 수 있는 발음이고 아니라면 만들 수 없는 발음이라고 판단하였습니다.
단순히 위처럼 판단 후 코드를 작성한 뒤 테스트 케이스를 실행하였을 때 1번째 테스트 케이스에서 통과하지 못하였습니다.
문제점을 파악해 보니 위 방법은 일부 발음 하지 못하는 문자열을 발음 가능한 문자열로 체크하는 문제를 발견했습니다.
예시) "wyeoo" (발음 불가능한 발음)
1. wyeoo => (발음 가능한 문자 "ye" 빈 문자열 치환) => "woo"
2. woo => (발음 가능한 문자 "woo" 빈 문자열 치환) => "'
3. 빈 문자열 체크 시 빈 문자열임으로 발음 가능한 문자열로 체크 후 카운트 증가
그래서 처음 만들 수 있는 문자열을 체크 후 제거하는 것이 아닌 Replace를 통해 임의의 글자 "X"로 치환한 후.
별도로 임의 문자 "X"를 제거하여 최종적으로 빈 문자열인지 체크하는 방식으로 수정 후 통과 하였습니다.
[깃헙 / Github]
😻 댓글과 공감 한 번씩 감사드립니다 😻
| 전체 코드 🔎
using System;
public class Solution {
// 발음 할수 있는 단어 리스트.
string[] checkWord = {"aya", "ye", "woo", "ma"};
public int solution(string[] babbling) {
// answer 정답 카운트 변수
int answer = 0;
// CheckBabbling함수 실행 및 리턴값을 answer의 대입
answer = CheckBabbling(babbling);
// answer 변수 리턴(제출)
return answer;
}
// 발음 할수 있는지 체크하는 함수
public int CheckBabbling(string[] babbling)
{
// 기본 count값 0으로 설정
int count = 0;
// 입력 받은 babbling 배열의 길이 만큼 반복
for(int i =0 ; i < babbling.Length; i++)
{
// checkWord 배열의 길이 만큼 반복
for(int j = 0; j < checkWord.Length; j++)
{
// i번째 babbling 문자열을 j번째 checkWord가 포함되었다면 "X"로 치환
// Ex) "wyeoo" => "wxo"
// Ex) "yemawoo" => "xxx"
babbling[i]=babbling[i].Replace(checkWord[j],"x");
}
// 비교를 위해 한번더 치환된 i번째 babbling문자열을 "X" => ""로 치환
for(int j = 0; j < babbling[i].Length; j++)
{
babbling[i]=babbling[i].Replace("x","");
}
// 최종적인 i번째 babbling값이 ""이라면 count증가
if(babbling[i] == "")
count++;
}
return count;
}
}