문제 풀기/C#

97. 모음 사전

kagan-draca 2025. 3. 20. 16:18

 

기본 틀 :

 

using System;

public class Solution {
    public int solution(string word) {
        int answer = 0;
        return answer;
    }
}

 

문제에서 DFS를 활용하여 바로 원하는 word를 구하고자 시도했지만

 

도무지 구해지지 않았다...

 

결국 다른 사람이 작성한 코드를 바탕으로 코드를 분석하기로 결정했다.

 

    public char[] alpabet = {'A', 'E', 'I', 'O', 'U'};
    public List<string> list = new List<string>();

 

먼저, char 형 배열을 만들어 'A', 'E', 'I', 'O', 'U'로 초기화 해주고

 

만들어진 단어를 저장하기 위해 문자열 List를 만들어줬다.

 

    public void DFS(string currentWords)
    {
        if(currentWords.Length > 5) return;
        
        list.Add(currentWords);
        
        for(int i = 0; i < alpabet.Length; i++)
            DFS(currentWords + alpabet[i]);
        
        return;
    }

 

DFS를 구현해보고자 시도할 때 매개변수를 뭘로 줄지 많이 고민 했는데

 

그냥 현재의 문자열을 나타내는 string 변수 하나만 사용 됐다...

 

함수 내부에는 if문으로 현재 단어가 5글자를 초과할 경우 사전의 범위를

 

벗어나기 때문에 return으로 함수를 종료해주는 것을 확인할 수 있었다.

 

5글자 이하일 경우에는 list.Add()로 현재 단어를 list에 추가해주고

 

for문을 사용하여 DFS를 호출해 입력될 수 있는 단어를 추가한 문자열을 DFS에 보내줬다.

 

그 결과, 깊이 우선 탐색과 반복문에 의해 

 

 

위와 같이 List에 문자열이 추가되게 됐다.

 

    public int solution(string word) {
        DFS("");
        return list.IndexOf(word);
    }

 

DFS에 완전히 종료된 이후에는 

 

List에서 IndexOf를 통해 찾고자 하는 word를 찾을 수 있었다.

 

위 문제의 코드를 보고 좀 더 다양한 방식의 사고 과정이 필요하다 느꼈다.

 

'문제 풀기 > C#' 카테고리의 다른 글

99. 롤케이크 자르기  (0) 2025.03.21
98. 뒤에 있는 큰 수 찾기  (0) 2025.03.21
96. 주차 요금 계산(TimeSpan 자료형)  (0) 2025.03.19
95. k진수에서 소수 개수 구하기  (0) 2025.03.18
94. 타겟 넘버  (0) 2025.03.18