우규이인우윀
Eager To Learn 🌌
우규이인우윀
전체 방문자
였늘
μ–΄μ œ

λΈ”λ‘œκ·Έ 메뉴

  • 🏑 ν™ˆ
  • πŸš€ κΉƒν—ˆλΈŒ
  • β›… νƒœκ·Έ ν΄λΌμš°λ“œ
  • λΆ„λ₯˜ 전체보기 (217)
    • πŸ‘¨πŸ»β€πŸ’» PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm 기법 (1)
      • 바킹독 (21)
    • λΈ”λ‘œκ·Έ 이사 (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • 자료ꡬ쑰 (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • κ°œλ°œμ„œμ  (15)
      • 가상 λ©΄μ ‘ μ‚¬λ‘€λ‘œ λ°°μš°λŠ” λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ 섀계 기초 (1)
      • 였브젝트 - 쑰영호 (7)
      • μΉœμ ˆν•œ SQL νŠœλ‹ (7)
    • 회고 (2)
hELLO Β· Designed By μ •μƒμš°.
우규이인우윀
πŸ‘¨πŸ»β€πŸ’» PS/LeetCode 150

[Java] 211. Design Add and Search Words Data Structure

πŸ‘¨πŸ»β€πŸ’» PS/LeetCode 150

[Java] 211. Design Add and Search Words Data Structure

2023. 9. 12. 09:22

문제 νŒŒμ•…

νŠΉμ • λ¬Έμžμ—΄μ„ λ³΄κ΄€ν•˜κ³  search ν–ˆμ„ λ•Œ, μ‘΄μž¬ν•˜λ©΄ trueλ₯Ό λ°˜ν™˜ν•˜λŠ” 자료ꡬ쑰λ₯Ό λ§Œλ“€μ–΄μ•Όν•œλ‹€.

 

. 이 ν¬ν•¨λœ κ²½μš°λŠ” μ–΄λ– ν•œ λ¬Έμžκ°€ 듀어가도 ν—ˆμš©λœλ‹€.


풀이

1️⃣ Trie 자료ꡬ쑰λ₯Ό μ΄μš©ν•œ 풀이

πŸ’‘ λ– μ˜€λ₯Έ Idea

Trie 자료ꡬ쑰λ₯Ό μ΄μš©ν•˜λ©΄ μ ‘λ‘μ–΄λ‚˜ λΆ€λΆ„ λ¬Έμžμ—΄μ„ 검색할 수 μžˆλ‹€.

λ”°λΌμ„œ, Trie 자료ꡬ쑰λ₯Ό κ΅¬ν˜„ν•˜μ˜€λ‹€.

특히, 이 λ¬Έμ œμ—μ„œλŠ” search κ³Όμ •μ—μ„œ . 이 ν¬ν•¨λ˜μ–΄ μžˆλŠ” κ²½μš°λŠ”

ν•΄λ‹Ή λ…Έλ“œκ°€ κ°–λŠ” λͺ¨λ“  μžμ‹ λ…Έλ“œλ“€μ„ νƒμƒ‰ν•˜λ„λ‘ κ΅¬ν˜„ν•˜μ—¬ ν•΄κ²°ν•  수 μžˆμ„ 것이라 νŒλ‹¨ν•˜μ˜€λ‹€.

 

import java.util.*;

class WordDictionary {

    static class Node {
        Map<Character, Node> children;
        boolean isEndOfWord;

        public Node() {
            this.children = new HashMap<>();
            this.isEndOfWord = false;

        }
    }

    Node root;

    public WordDictionary() {
        root = new Node();
    }

    public void addWord(String word) {
        addWord(this.root, word);
    }

    private void addWord(Node node, String word) {
        if (word.length() == 0) {
            node.isEndOfWord = true;
            return;
        }

        char ch = word.charAt(0);
        Node child;
        if (node.children.containsKey(ch)) {
            child = node.children.get(ch);
        } else {
            child = new Node();
            node.children.put(ch, child);
        }

        addWord(child, word.substring(1));
    }

    public boolean search(String word) {
        return search(this.root, word);
    }

    private boolean search(Node node, String word) {
        if (word.length() == 0) {
            return node.isEndOfWord;
        }

        char ch = word.charAt(0);
        if (ch == '.') {

            for (Node child : node.children.values()) {
                if (search(child, word.substring(1))) {
                    return true;
                }
            }
            return false;
        }

        if (!node.children.containsKey(ch)) {
            return false;
        } else {
            return search(node.children.get(ch), word.substring(1));
        }

    }
}

 

κ²°κ³Ό


πŸ“– 회고

Trie 자료ꡬ쑰의 κ°€μž₯ 큰 νŠΉμ§• μ€‘μ˜ ν•˜λ‚˜μΈ λΆ€λΆ„ λ¬Έμžμ—΄ 검색을 직접 κ΅¬ν˜„ν•΄λ³Ό 수 μžˆλŠ” λ¬Έμ œμ˜€λ‹€.

 

λ‹€λ₯Έ μ½”λ“œλ₯Ό μ°Έκ³ ν•˜μ§€ μ•Šκ³  직접 κ΅¬ν˜„ν•˜λ©΄μ„œ, λ™μž‘ λ©”μ»€λ‹ˆμ¦˜μ„ 이해할 수 μžˆμ—ˆλ‹€.

  • 문제 νŒŒμ•…
  • 풀이
  • 1️⃣ Trie 자료ꡬ쑰λ₯Ό μ΄μš©ν•œ 풀이
  • κ²°κ³Ό
  • πŸ“– 회고
'πŸ‘¨πŸ»β€πŸ’» PS/LeetCode 150' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Java] 215. Kth Largest Element in an Array
  • [Java] 212. Word Search II
  • [Java] 208. Implement Trie (Prefix Tree)
  • [Java] 637. Average of Levels in Binary Tree
우규이인우윀
우규이인우윀
개발자 κΏˆλ‚˜λ¬΄

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.