공부한 것
- LeetCode #212. Word Search II
- 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: {},
},
}
- 그냥 console.log(this.#child): ❌ 중첩 객체는 파고들지 못한다.
출력 결과: { a: Trie {}, b: Trie {} }
- console.dir(this.#child, { depth: null }): ❌ this가 평범한 Object 객체였다면 이걸로 중첩의 끝까지 출력됐을 것이다.
출력 결과: { a: Trie {}, b: Trie {} }
- 커스텀 메소드 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