본문 바로가기

Frontend Dev/Input

[IT 5분 잡학사전 2주 챌린지] 자료구조와 알고리즘은 필수라고?

반응형

노마드 개발 북클럽 “IT 5분 잡학사전” 2주 챌린지
(23.11.10 ~ 23.11.24)

 

11/16 THU, Assignment # 07

 

🔖 오늘 읽은 범위 : 에피소드 22 ~ 에피소드 25

 

1. 책에서 기억하고 싶은 내용은?

✏️ 자료구조와 알고리즘은 필수라고? (에피소드 22)

 “개발자가 되고 싶다면 결국에는 자료구조와 알고리즘을 공부하고, 자신의 코드에 적용할 수 있어야 해! 자료구조와 알고리즘을 공부하면 코드를 더 효율적으로 만들 수 있거든.”

 초기에는 일단 코드를 실행하는 것을 목표로 삼는 것이 좋아. 그렇다면 자료구조와 알고리즘은 대체 언제 필요할까?

 ➡️ 코드를 효율적으로 만들기 위해!

 
 코딩은 다 했고, 버그도 없어. 그다음 단계로 코드를 정리하지. 관리하기도, 협업하기도 편하도록! 효율적인 코드, 속도가 빠른 코드를 고민하게 돼. 이때 자료구조와 알고리즘이 필요해.


알고리즘이란? 컴퓨터에게 내리는 지시 사항을 나열한 것

- 실생활에서 알고리즘을 사용한 예로는 지도 앱을 들 수 있어.

  패스파인더(pathfinder) 알고리즘 : 목적지까지 최대한 빨리 가는 방법을 알려주는 거

- 압축(compression) 알고리즘 : 이미지를 최대한 덜 손상하면서도 용량을 효율적으로 줄일 수 있는 알고리즘

  PNG, JPG 파일 모두 이미지 압축 알고리즘을 사용


데이터를 효율적으로 보관하고 찾기 위한 자료구조

 ➡️ 자료구조의 자료는 데이터

 데이터를 보기 좋게 보관하는 것을 넘어서 찾기 좋게 제대로 보관해야 해. 어떤 자료구조를 사용하는지에 따라 프로그램 속도가 빨라지거나 느려지거든.

 데이터를 작은 것부터 큰 순서로 정리하는 자료구조(데이터 크기 기준), 이름표를 붙여서 정리하는 자료구조(검색을 위한 인덱스 기준), 데이터가 들어오는 순서로 정리하는 자료구조(생성 시간 기준) 등 매우 다양해.

 자료구조의 방식은 왜 이렇게 다양할까? 프로그램의 목적이 다양하기 때문이야. 어떤 프로그램은 검색을, 또 어떤 프로그램은 시간을 목적으로 할 수 있어. 만약 데이터 크기에 따른 데이터 사용을 목적으로 하는 프로그램이라면 데이터 크기 순서로 정리하는 자료구조를 쓰면 효율적일 거야.

✏️ 배열이 뭐죠? (에피소드 23)

• 배열은 램에 줄줄이 이어진 형태로 공간을 차지하고 있다.

컴퓨터는 배열의 시작 주소와 길이를 알고 있다. 그래서 배열은 읽는 속도가 아주 빠르다.

배열은 맨 앞부터 차곡차곡 채워져 있어야 한다. 그래서 배열은 삽입과 삭제가 느리다.

✏️ 알고리즘의 속도는 어떻게 표현할까? (에피소드 24)

 시간 복잡도를 이야기할 때는 알고리즘으로 작업을 완료할 때까지 걸리는 절차 수 N을 이용해서 O(N), O(log N)과 같이 표현하는데, 이것을 빅 오(Big-O) 표기법이라고 한다.

 선형 검색 알고리즘은 배열을 앞에서부터 하나씩 검색하고, 그래서 배열 크기가 커지면 검색 시간도 정비례로 커진다고 했어. 배열의 길이를 N이라고 하면 검색 횟수는 최대 N이 되는 거지. 그리고 이때 시간 복잡도는 O(N)과 같이 표현해.
  ➡️ "선형 검색 알고리즘의 시간 복잡도는 O(N)이다라고 말하는 게 더 간단하기 때문이야."

 단지 설명을 간단하게 만들어 줄 뿐 아니라 알고리즘 분석을 빠르게 할 수 있게 해줘.

 

2. 오늘 읽은 소감은?

 오늘의 첫번째 에피소드에 등장한 자료구조와 알고리즘은 나에겐 너무 어렵고 약한 부분이다. 아마 많은 비전공자 학습자들이 이 부분과 함께 코딩 테스트를 어려워 할것이다.

영상출처: https://youtu.be/I5cq54MFQCo?si=biiJ1Fcjgp9SwP6Q 

 

 알고리즘 이야기를 할 때 샌드위치 만들기 영상이 떠올랐다. 알고리즘이 샌드위치 만들기와 같이 그저 인간의 언어로 적기만 하는 거라면 좀 더 쉬웠을텐데. (물론 영상을 보니 쉬워보이지만은 않았다...ㅎㅎ) 이걸 컴퓨터에게 지시를 하자니, 그 부분이 어려운 게 아닐까?

 여튼 공부를 하다보면 여러가지 의견을 듣게 된다. 자료구조와 알고리즘을 배우면 당연히 좋다, 무조건 배워야 한다, 배울 필요 없다, 지금 당장은 안해도 된다, 코딩테스트 필요없다, 코딩테스트 꾸준히 연습해야한다 등등… 정말 많은 의견들이 있고, 그 중에 나에게 맞는 방법이 무엇인지 찾는건 아마 앞으로도 시간이 걸리겠지만, 헷갈렸던 생각은 조금씩 사라지고 있다. 오래가는 개발자가 되기 위해서는 자료구조와 알고리즘 공부를 조금씩이라도 해야겠다는 생각이 들었다. 데이터를 효율적을 관리하는 것은 결국 사용자 경험과 직결될 것이기 때문이다.

 오늘 어려운 개념들을 많이 학습했다. Big-O 표기법에 대해서도 알게 되었는데, 늘 듣기만 했던 시간복잡도와 Big-O 표기법이 이제는 이해는 할 수 있을 정도가 되었다. 다만, 아직도 “알고리즘의 속도를 표현하는 방법”이라는 설명 외에는 뭐라고 말해야할지 잘 모르겠지만.

 어려운 개념들도 계속해서 듣고, 말하다 보면 익숙해지겠지. 이번 주 내내 감기에 시달리는 중이라 머리도 잘 안돌아가는 것 같다. 몸 건강부터 챙겨야겠다 💊🥲

 


 

 노개북 챌린지에 열심히 참여중인 분들이 정말 많았는데 정말 정리를 잘하신 분을 발견했다!!

 🔗 Gata님 Velog

 앞으로 남은 한주도 화이팅!

 

반응형