이 문제는 JavaScript로 풀 때도 엄청 힘들었는데
C#으로 풀 때도 엄청 힘들었다...
풀이 1)
먼저, 발음 할 수 있는 단어를 배열로 작성한다.
그 후, 매개변수로 주어진 stirng 배열을 순회하면서
발음 가능한 단어 배열과 비교를 진행할 것인데
이때, 동일한 단어가 2번 나오는 경우가 존재할 수 있기 때문에
Replace(발음 가능 단어 + 발음 가능 단어, " 발음 불가능 단어 ")
로 단어를 바꿔준다.
동일한 단어가 2번 나오지 않을 경우는
Replace(발음 가능 단어, " ")
으로 공백만을 남겨둔다.
이렇게 매개변수로 주어진 발음을 모두 " "으로 제거한 후
Trim()으로 공백을 제거하고 Length가 0일 경우 answer을 1증가 시켜준다.
using System;
public class Solution {
public int solution(string[] babbling) {
int answer = 0;
string[] canSpeak = {"aya", "ye", "woo", "ma"};
for(int i= 0; i < babbling.Length; i++)
{
for(int j = 0; j < canSpeak.Length; j++)
{
babbling[i] = babbling[i].Replace(canSpeak[j] + canSpeak[j], "#");
// 연속 발음으로 불가능한 경우 "#"으로 변경
babbling[i] = babbling[i].Replace(canSpeak[j], " ");
// 발음 가능한 경우 " "으로 변경
}
if(babbling[i].Trim().Length == 0) answer++;
// Trim()으로 공백 제거
// 길이가 0 즉, "#"이나 발음 불가능한 단어가 없을 경우 1 증가
}
return answer;
}
}
풀이 2) 정규식
문제를 풀 던 중 너무 모르겠어서 GPT에게 이 문제를 풀어보라고 지시해봤다.
GPT는 정규식을 활용해서
using System;
using System.Text.RegularExpressions;
public class Solution {
public int solution(string[] babbling) {
string pattern = "^(aya(?!aya)|ye(?!ye)|woo(?!woo)|ma(?!ma))+$";
return Array.FindAll(babbling, word => Regex.IsMatch(word, pattern)).Length;
}
}
위와 같은 코드를 작성했는데...
코드를 보고 기겁했다...
정규식을 제대로 배우지 않아서 정확하게 해석은 불가능 했지만
GPT의 설명에 따르면
^과 $으로 시작과 끝을 지정하고, 발음 가능한 단어를 ()으로 그룹화 해주었다.
그리고 (?!발음 가능한 단어)로 연속된 발음이 안 되게 만들어 준 후
Array.FindAll()와 Regex.IsMatch()을 사용해 매개변수로 주어진
balling과 정규식에 부합하는 모든 경우를 배열 형식으로 만들어 준 후
Length로 개수를 return 해줬다...
(아직 내가 정규식을 정확하게 다룰 줄 모르지만... 이건 너무 심했다고 생각한다...)
'문제 풀기 > C#' 카테고리의 다른 글
64. 체육복 (0) | 2025.02.12 |
---|---|
63. 숫자 짝수 (Dictionary) (0) | 2025.02.11 |
61. (중요)로또의 최고 순위와 최저 순위(Intersect, Union, Except) (0) | 2025.02.10 |
60. 기사단원의 무기 (0) | 2025.02.10 |
59. 덧칠하기 (0) | 2025.02.07 |