[Java] 모음사전

정석·2024년 6월 23일
0

알고리즘 학습

목록 보기
64/67
post-thumbnail

🧑🏻‍💻 문제

  • "A E I O U" 에 대한 문자들만 이용하여, 길이 '5' 이하의 모든 단어를 만들고
    문제에서 원하는 단어가 몇번째에 있는지 구해라.

HashSet

  • 주어진 문자로 조합을 만들었을 때 중복 되는 문자들은 불필요하므로 HashSet 을 이용하여 중복 단어를 제거한다.

LinkedHashSet

  • 문자들이 사전 순서대로 정렬되어 있기 때문에, 조합 할 때 생성된 문자의 순서도 함께 저장되어야 하므로 순서가 보장되도록 Linked 를 이용한다.

💡 풀이

  • dfs 재귀를 활용하여 모든 단어의 조합을 생성하고 (단어의 길이가 5가 초과되는 순간 return),
  • 생성된 단어들을 LinkedHashSet 에 담아 순서가 보장되고 중복이 제거된 단어들을 만든다.
  • 문제에서 주어진 단어를 찾아 인덱스 값을 return 한다. (Iterator 활용)
import java.util.*;

class Solution {
    
    static Set<String> set = new LinkedHashSet<>();
    
    private static void dfs(String str, String words) {
        if (str.length() == 6) return;
        if (!str.isEmpty()) set.add(str);
        for (int i = 0; i < 5; i++) {
            dfs(str + words.charAt(i), words);
        }
    }
    public int solution(String word) {
        String words = "AEIOU";
        dfs("", words);
        
        Iterator<String> it = set.iterator();
        int cnt = 0;
        while(it.hasNext()) {
            cnt += 1;
            if (it.next().equals(word)) break;
        }
        
        return cnt;
    }
}

0개의 댓글