깊은바다거북
개발 공부 기록
깊은바다거북
전체 방문자
오늘
어제
  • 분류 전체보기 (219)
    • JAVA (9)
    • JavaScript (15)
    • 스파르타코딩클럽 (11)
      • [내일배움단] 웹개발 종합반 개발일지 (5)
      • [내일배움캠프] 프로젝트와 트러블 슈팅 (6)
    • SQL | NoSQL (4)
    • CS 등등 (0)
    • TIL | WIL (173)
    • 기타 에러 해결 (3)
    • 내 살 길 궁리 (4)

인기 글

최근 글

최근 댓글

태그

  • 시간 복잡도
  • 최소 힙(Min Heap)
  • leetcode-cli
  • Trie
  • TIT (Today I Troubleshot)
  • Inorder Traversal(중위 순회)
  • TypeScript
  • Leetcode
  • tree
  • 자잘한 에러 해결
  • 자바스크립트 기초 문법
  • 팀 프로젝트
  • 최대 힙(Max Heap)
  • 코딩테스트 연습문제
  • Binary Tree(이진 트리)
  • Backtracking(백트래킹)
  • Til
  • 01. 미니 프로젝트
  • 재귀 함수
  • 프로그래머스
  • 점화식(Recurrence Relation)
  • POST / GET 요청
  • Preorder Traversal(전위 순회)
  • BFS(너비우선탐색)
  • BST(이진 탐색 트리)
  • Linked List
  • 혼자 공부하는 자바스크립트
  • 트러블 슈팅 Troubleshooting
  • DFS(깊이우선탐색)
  • 자료 구조
hELLO · Designed By 정상우.
깊은바다거북

개발 공부 기록

TIL | WIL

9/22 (금) 단어 검색II 문제를 Trie로 업그레이드하다 TIL

2023. 9. 22. 23:45

공부한 것

  • LeetCode #212. Word Search II
    LeetCode - The World's Leading Online Programming Learning Platform
    Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
    https://leetcode.com/problems/word-search-ii/description/

    • Trie 클래스를 구현해서 풀었다. 기존에 알던 구현 형식에 나름 변형을 가했는데 잘 풀렸다.
    • 세 번의 서로 다른 시도 끝에(로직은 통과가 됐었다) 다른 사람의 풀이를 참고해서 시간도 맞춰 풀 수 있었다.

Trie 클래스에 커스텀 print() 메소드 만들기

Trie 클래스를 만들었다. 다음과 같은 자가 중첩 자료구조를 가지는 Trie에 현재 어떤 문자들이 담겼는지 프린트해보고 싶었다:

class Trie {
    #child: { [key: string]: Trie }
    // ...
}

const trie:Trie = new Trie(board);
// board = [["a"],["b"]]일 때, trie.#child는 board로 가능한 모든 루트를 가져야 하고 다음과 같은 구조가 된다: 
{ 
	a: {
		b: {},
	}, 
	b: {
		a: {},
	},
}
  1. 그냥 console.log(this.#child): ❌ 중첩 객체는 파고들지 못한다.

    출력 결과: { a: Trie {}, b: Trie {} }

  1. console.dir(this.#child, { depth: null }): ❌ this가 평범한 Object 객체였다면 이걸로 중첩의 끝까지 출력됐을 것이다.

    출력 결과: { a: Trie {}, b: Trie {} }

  1. 커스텀 메소드 print()를 이용한 console.log(this.print()): ✔️

    출력 결과: { a: { b: {} }, b: { a: {} } }

3번 방법으로 원하는 결과를 얻을 수 있었다.

  • 커스텀 print() 코드:
    // Trie를 프린트
    print() {
        return this.#print(this);
    }
    
    #print(currentChild: Trie): string {
        const keys: string[] = Object.keys(currentChild.#child);
        if (keys.length === 0) return '{}';
    
        const childStrings: string[] = keys.map((charKey) => {
            const childString = this.#print(currentChild.#child[charKey]);
            return `${charKey}: ${childString}`
        });
    
        return `{ ${childStrings.join(', ')} }`;
    }


Uploaded by N2T

    'TIL | WIL' 카테고리의 다른 글
    • 9/26 (화) 이진 트리 후위 순회 구현 TIL
    • 9/25 (월) 이진 트리 전위 순회와 중위 순회 구현하기 TIL
    • 9/21 (목) 불렛 저널: 기록을 집대성할 방법을 찾다 TIL
    • 9/20 (수) Bitwise NOT으로 Math.floor() 대체하기 TIL
    깊은바다거북
    깊은바다거북

    티스토리툴바