[항해99] Week 2. 알고리즘/자료구조

Shinny·2022년 1월 23일
0

벌써 항해99의 2주차 과정이 다 끝나고 3주차에 접어들고 있다. 최근 코딩 열풍이라는 트렌드에 맞춰 국내 탑티어 IT 회사의 개발자분들을 직접 강사로 모셔와 제작한 강의들이 시중에 워낙 많다보니, 지금까지는 그런 강의들을 몇개 구매해서 듣고, 이것 저것 조금씩 만들어 본 게 내 개발 경험의 전부였다. 토이 프로젝트를 2-3개 정도 한 수준이었다고나 할까?
그랬던 나였기에 알고리즘/자료구조 공부는 필요성을 알기만 했지, 실제로 도전하고 경험한 적은 없었다. 그래서 이번 항해99 심화반에서 진행된 2주차 커리큘럼은 나에게 하나의 커다란 도전이었다.

What I did

  • 문자열 조작
  • 배열
  • 연결리스트
  • 스택과 큐
  • 해시테이블
  • Github 활용
  • 30개의 leetcode 문제 풀이
  • 프로그래머스 Test: Lv.2 2문제 중 1문제 통과

What I learned

1. 문자열 조작

문자열 조작(String Manipulation)은 문자열을 변경, 분리하는 등의 여러 과정을 통칭하여 일컫는 말이다. 문자열 조작 파트는 실무에서도 다양한 분야(정보처리-웹 페이지 탐색, 통신 시스템-데이터 전송, 프로그래밍 시스템)에서 쓰이는 실용적인 주제이기도 하기 때문에 꼭 손에 익을만큼 능숙한 수준까지 트레이닝을 하는 것이 중요한 것 같다.

2. 배열

자료구조는 크게 메모리 공간 기반의 연속방식과 포인터 기반의 연결 방식으로 나뉘는데, 배열은 이 중에서 연속 방식의 가장 기본이 되는 자료형이라고 한다. 대부분의 추상자료형(ADT)도 배열을 기반으로 하는데 뒤에서 살펴볼 큐 같은 경우 배열로 구현한다.
배열의 장점은 배열의 개수와 상관없이 어느 위치에나 O(1)에 조회가 가능하다는 것이다.

3. 연결리스트

연결리스트는 포인터 기반의 연결방식의 가장 기본이 되는 자료형으로서, 데이터 요소의 선형 집합이다. 하지만 데이터의 순서가 메모리에 물리적인 순서대로 저장되지는 않는다는 특징이 있다.

4. 스택과 큐

스택은 거의 모든 어플리케이션을 만들 때 사용되는 자료구조로서, 파이썬은 스택 자료형을 별도로 제공하지는 않으나 리스트가 사실상 스택의 모든 연산을 지원한다.
스택은 후입선출, 큐는 선입선출로 처리되는데 이를 비유로 하자면 스택은 회전초밥이 쌓이고 또다시 치우는 과정을 생각하면 쉽다. 그리고 큐는 일반적으로 인기 식당의 웨이팅하는 대기인원이 빠지는 과정을 생각하면 쉽다. 큐 또한 리스트를 활용해서 대부분의 연산이 가능하기는 하지만, 리스트는 동적 배열로 구현되어 있기 때문에 효율적인 연산 수행을 위해서는 리스트보다 데크를 사용하는 것이 더 좋다.

5. 해시테이블

해시테이블은 키를 값에 매핑할 수 있는 구조인 연관 배열 추상 자료형을 구현하는 자료구조이다.

How I've Changed

1. 파이썬 문법의 이해도 상승

  • 문자열, 배열의 인덱스(index)를 활용해서 슬라이싱을 하는 등 지금까지는 언어를 활용하는 부분에서 시간이 오래 걸렸다. 하지만 언어를 다루는 것이 미숙해 낭비되는 시간들을 많이 줄였다.

2. 컴퓨터적 사고에 대한 이해

  • 길거나 혹은 너무 짧아서 이해가 안 되는 코드를 마주쳤을 때, 한줄 한줄 따라가보면서 실제로 함수가 어떤 부분에서 어떤 식으로 작동을 하는지 감을 많이 익힐 수 있었다.
  • 기본적으로 원래 있는 연산을 필요할 때 쓰는 것에서 그치는 것이 아니라 실제로 그 코드의 동작 원리를 이해하고 직접 구현하는 연습을 하면서(스택을 사용한 큐 구현, 큐를 사용한 스택 구현, 해시맵 디자인 등) 컴퓨터의 사고방식을 이해하기 시작하는 계기가 되었다.

3. 더 효율적인 방법을 추구

  • 단순히 하나의 기능을 구현하고 결과를 리턴(return)하는 것에서 그치는 것이 아니라 이렇게 코드를 짜면 과연 시간복잡도와 공간복잡도는 어떻게 되고, 또 이게 가장 효율적인 구현 방법인지를 다시 한번 고려해보는 연습을 하게 되었다.

What I will do next week

  • 그래프(DFS, BFS, 벡트레킹)
  • 이진트리

1. 최소 2시간은 혼자서 고민하고 솔루션을 보고 배울 것

  • 알고리즘 공부가 처음이라 많이 허둥지둥했던 지난 주와 달리, 이번 주는 꼭 매일 주어진 5개 가량의 문제에 각각 최소 2-3시간은 투자하여 학습할 것이다.

2. 알고리즘 풀이법 깃허브, velog에 남기기

  • 지난주는 대부분 결국 솔루션을 보고 풀이를 한 게 전부가 되어버려서 깃허브에 커밋하거나 벨로그에 남기는 것이 큰 의미가 없었다. 하지만 이번주에는 꼭 나만의 풀이법과 수도 코드 등을 적고, 실제 솔루션과 어떻게 비슷하고 다른지를 정리하는 글을 남겨야겠다.

알고리즘/자료구조 공부는 결국 오롯이 나 자신과의 싸움이다. 쉽지 않은 이 시간들을 더 큰 성장을 위해 필요한 하나의 과정임을 받아들이고, 반드시 나와의 싸움에서 승리하는 Week 3를 보낼 것이다.

일주일 후에는 또 어떤 내용들이 WIL에 담기게 될지 벌써 기대가 된다🙏 화이팅!

profile
비즈니스 성장을 함께 고민하는 개발자가 되고 싶습니다.

0개의 댓글