벌써 항해99의 2주차 과정이 다 끝나고 3주차에 접어들고 있다. 최근 코딩 열풍이라는 트렌드에 맞춰 국내 탑티어 IT 회사의 개발자분들을 직접 강사로 모셔와 제작한 강의들이 시중에 워낙 많다보니, 지금까지는 그런 강의들을 몇개 구매해서 듣고, 이것 저것 조금씩 만들어 본 게 내 개발 경험의 전부였다. 토이 프로젝트를 2-3개 정도 한 수준이었다고나 할까?
그랬던 나였기에 알고리즘/자료구조 공부는 필요성을 알기만 했지, 실제로 도전하고 경험한 적은 없었다. 그래서 이번 항해99 심화반에서 진행된 2주차 커리큘럼은 나에게 하나의 커다란 도전이었다.
문자열 조작(String Manipulation)은 문자열을 변경, 분리하는 등의 여러 과정을 통칭하여 일컫는 말이다. 문자열 조작 파트는 실무에서도 다양한 분야(정보처리-웹 페이지 탐색, 통신 시스템-데이터 전송, 프로그래밍 시스템)에서 쓰이는 실용적인 주제이기도 하기 때문에 꼭 손에 익을만큼 능숙한 수준까지 트레이닝을 하는 것이 중요한 것 같다.
자료구조는 크게 메모리 공간 기반의 연속방식과 포인터 기반의 연결 방식으로 나뉘는데, 배열은 이 중에서 연속 방식의 가장 기본이 되는 자료형이라고 한다. 대부분의 추상자료형(ADT)도 배열을 기반으로 하는데 뒤에서 살펴볼 큐 같은 경우 배열로 구현한다.
배열의 장점은 배열의 개수와 상관없이 어느 위치에나 O(1)에 조회가 가능하다는 것이다.
연결리스트는 포인터 기반의 연결방식의 가장 기본이 되는 자료형으로서, 데이터 요소의 선형 집합이다. 하지만 데이터의 순서가 메모리에 물리적인 순서대로 저장되지는 않는다는 특징이 있다.
스택은 거의 모든 어플리케이션을 만들 때 사용되는 자료구조로서, 파이썬은 스택 자료형을 별도로 제공하지는 않으나 리스트가 사실상 스택의 모든 연산을 지원한다.
스택은 후입선출, 큐는 선입선출로 처리되는데 이를 비유로 하자면 스택은 회전초밥이 쌓이고 또다시 치우는 과정을 생각하면 쉽다. 그리고 큐는 일반적으로 인기 식당의 웨이팅하는 대기인원이 빠지는 과정을 생각하면 쉽다. 큐 또한 리스트를 활용해서 대부분의 연산이 가능하기는 하지만, 리스트는 동적 배열로 구현되어 있기 때문에 효율적인 연산 수행을 위해서는 리스트보다 데크를 사용하는 것이 더 좋다.
해시테이블은 키를 값에 매핑할 수 있는 구조인 연관 배열 추상 자료형을 구현하는 자료구조이다.
알고리즘/자료구조 공부는 결국 오롯이 나 자신과의 싸움이다. 쉽지 않은 이 시간들을 더 큰 성장을 위해 필요한 하나의 과정임을 받아들이고, 반드시 나와의 싸움에서 승리하는 Week 3를 보낼 것이다.
일주일 후에는 또 어떤 내용들이 WIL에 담기게 될지 벌써 기대가 된다🙏 화이팅!