TIL | WIL

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

깊은바다거북 2023. 9. 22. 23:45

공부한 것

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