본문 바로가기

카테고리 없음

[TIL] 프로그래머스 데브코스 - 전위,중위,후위 순회 + trie

뭘 했는가?

1. 과제 구현(전위, 중위, 후위 순회 + trie)

2. 백준 알고리즘 스터디(2231,1003,1541)

 

 

 과제구현

1) 전위, 중위, 후위 순회

예전에 인프런 알고리즘 강의에서 재귀 함수시간에 한번 짧막하게 다뤘던 기억이있었는데 까먹었기도하고 이를 JS의 클래스 문법을 사용하면서 직접 노드를 만들고 클래스 내부에 함수를 선언하는 방식으로 구현을 하려다보니 새로운 느낌이 들었다. 핵심로직은 같은데, 아직 클래스 문법이 익숙하지 않아서 였던거 같기도하다. 재귀함수 호출 순서를 계속 머리로만 생각하려다 보니 이해가 안가 시간이 오래 걸렸었는데 그냥 공책에다가  콜 스택을 직접 그려가며 호출 순서를 파악하니 이해하기가 편했다. 

 

2) trie 구현

딱 들었을 때는 검색창에서 입력을 했을 때 입력하는도 중 연관된 검색어가 나열되는 생각을 했다. 근데 이게 연관검색어를 어디까지 불러와야 하는지가 막막했다. 이미 구현한 다른 분들 코드를 참고했었는데, insert로 등록된 검색어에 한에서 내가 지금 입력하는 문자열을 자동완성시켜주는 방식으로 구현하셨었다. 그래서 평상시 웹사이트를 이용했을 때 내가 과거에 검색한 기록 내에서 연관검색어를 불러오는 구조로 생각했다. 과제도 과제지만, 기존에 강의시간에서 다뤘던 insert와 has부터가 이해가 안됐다. 노드를 구성할 때 다음 노드를 Map객체로 표현하다 보니 어려웠던 것 같다. 마침 질문방을 보다가 알게 된 사실인데 Map을 이루고 있는 정보가 간선의 정보(key)와 자식 노드의 정보(value)로 이루어져 있다는 답변을 보고 바라보니 이전보단 좀 더 이해가 되었던 거 같다. 자동완성 함수는 우선 검색창에 검색어를 입력할 때 실시간으로 호출하는 방식이다. 처음에 구성했을 땐 만약에 apple이 trie에 등록되어있다면 a, ap, app, appl, apple 이런 식으로 자동완성이 만들어졌는다. 그래서 trie내에 등록된 의미 있는 단어만 보여주는 방식으로 바꾸기 위해(apple만 보여주기 위해) 간선과 자식 노드를 갖지 않는,트리구조상 최 말단인)에만 보여주게 구성했다. 

 

 

1주일이 지났다. 자료구조/알고리즘에대해서 배웠는데 이후 과정에서도 틈틈히 문제풀이를통해 감을 유지해야겠다.