문제 풀기/C#

62. 옹알이 (2) (정규식)

kagan-draca 2025. 2. 11. 15:36

 

이 문제는 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