Tries 알고리즘에서 핵심

낭만개발자·2022년 9월 28일
0

알고리즘

목록 보기
18/20

Tries 알고리즘에 방식이 Tree를 build 해주고 주어진 문자열을 search 해주는건데, search 부분에 핵심 하나만 말하라면 아래 부분이다. root 즉 key-value 의 자료 트리 객체 형태에서 해당 요소를 찾았으면 그 찾은 지점을 반환해서 재 활당 하는 부분이다.

즉 찾은 지점에서 재 할당은 다르게 말하면 트리 형태에서 1 depth 깊게 들어가는 것 과 같다고 이해하면 쉽다. 즉 DFS처럼 깊게 들어가는게 객체 재할당임

문제 풀다 트러블 슛팅

위 사진 보면 ㄹ. 부분에 undefined 에러를 뿜어 낸다.
그 이유는 원래 객체에서 조건문에 객체에선 괄호 표기법을 사용해 조건문 설정이 가능하다. 배열은 include()사용. 아래 참고:
https://velog.io/@yeongju/JavaScript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%A1%B0%EA%B1%B4%EB%AC%B8-Upgrade

그런데 ㄷ. 을 보면 root 자체가 어떠한 객체도 없는 undefined 상태인걸 알수 있고 ㄱ. 부분에 조건에선 if(root[])에 root가 있을시는 오류가 안나지만, 최종에서(=root가 전혀 없는 부분) 에서 에러가 남을 알 수 있다.

위의 경우엔 내가 root['*']의 값을 꺼낸 후 ㄹ.root = tries 재 할당을 함으로써 다시 root 영역을 초기화 해야 하는데 그걸 깜박하고 안하니
root는 최종 leaf 까지 검색 되었으므로 아예 아무 값이 없는데 if(root[])부분을 만났으니 그래서 undefined 를 뿜는 것이다.(만약 뒤에 {a:{b:{c...}}} 같이 하부 트리가 있었다면 에러가 안나는 부분임.)

즉 조건문에서 대괄호 표기법은 객체일땐 사용할 수 있고! 다만 객체의 최종 leaf까지 탐색 후에 다시 조건을 맞딱들일땐 이미 undefined상태이므로,
TypeError: Cannot read properties of undefined (reading:'무언가')를 만나게 된다.

profile
낭만닥터와 슬의를 보고 저런 개발자가 되어야 겠다고 꿈꿔봅니다.

0개의 댓글