자료구조와 알고리즘

Jeongyun Heo·2021년 1월 5일
0

자료구조

목록 보기
1/2
post-thumbnail

자료구조와 알고리즘
https://youtu.be/okHGRlgR8ps

자료구조와 알고리즘

자료구조와 알고리즘에 대한 전반적인 이해를 먼저 하고 그 뒤에 코딩 테스트 문제 푸는 연습을 하는 게 좋다.

자료구조와 알고리즘을 공부 할 때 어떻게 포인트를 잡고 공부하면 좋은지

자료구조는 서비스나 어플리케이션에서 필요한 데이터를 메모리에 어떻게 구조적으로 잘 정리해서 담아두고 관리하고 최종적으로 가장 효율적인 방식으로 필요한 데이터에 빠르게 접근하고 필요한 수정, 삽입, 삭제를 할 수 있도록 도와준다.

서비스에서 클라이언트에게 데이터를 제공하거나 어플리케이션에서 사용자에게 필요한 데이터를 보여주거나 수정할 때 효율적으로 일을 처리하기 위해서는 기능에 적합한 알맞는 자료구조를 쓰는 것이 정말 중요하다. 어떤 자료구조를 쓰느냐에 따라서 사용자가 원하는 기능을 수행하는데 0.2초가 걸릴 수도 2초가 걸릴 수도 있기 때문이다.

자료 구조 종류는 굉장히 다양하다.
대표적으로는 배열(Array), 단일 연결 리스트(List), 이중 연결 리스트(List), 스택(Stack), 해쉬 테이블(Hash table) 등이 있다.

자료 구조를 공부할 때 조금 포인트를 두고 공부하면 좋은 것은

  • 자료 구조 안에 있는 데이터들의 순서가 보장이 되는지 (Order)
  • 중복된 데이터가 들어갈 수 있는지 (Unique)
  • 검색할 때 얼마나 효율적인지 (Search)
  • 우리가 원하는 기능에 따라서 수정할 때 얼마나 효율적인지 (Modification)

이런 것들을 위주로 공부하면 좋을 거 같다.

알고리즘은 제한된 공간과 시간 안에서 데이터를 어떻게 처리할 것인지를 정해놓은 로직인데, 즉 주어진 인풋으로 정의된 계산을 수행한 다음에 아웃풋(결괏값)을 내는 것을 말한다.

그리고 알고리즘을 공부하다보면 Big O를 떼 놓을 수가 없는데
Big O는 동일한 알고리즘의 로직으로 인풋의 사이즈가 점점 커질수록
시간이 얼마나 더 많이 걸리느냐를 정의한 '시간 복잡도'를 나타내는, 표기할 수 있는 방법이다.

이렇게 알고리즘은 주어진 데이터를 검색(search)하거나 정렬(sort) 또는 총점(sum)을 구하는 등의 다양한 계산을 할 수 있는 것을 말한다.

알고리즘을 공부할 때 잡고 가면 좋은 포인트는

  • 인풋의 사이즈가 커질수록 Big O가 어떻게 변화하는지 (Input Size)
  • 그리고 공간과 시간의 복잡도는 어떤지 (Space, Time)
  • 그리고 어떤 자료 구조를 이용해서 이 알고리즘을 쓰는 게 좋은지 (Data Structure)
    등을 공부하면 좋다.

제일 좋은 알고리즘은 제공된 데이터를 정말 작은 공간과 빠른 시간 안에서 효율적으로 처리할 수 있는 것이 가장 좋다. (Efficient Data processing)

내가 알고 있는 언어의 문법과 가장 유사한 책을 골라서
물론 어떻게 구현하면 되는지 실제로 구현할 수 있는 수준까지 공부하면 좋겠지만 시간이 많이 없다면 이렇게 일일이 구현 사항을 공부하기 보다는 이 자료구조는 어느 상황에서 쓰이는 것이 좋고 또 어떤 식의 API들이 있는지 이런 것들, 조금 큰 그림을 보면서 공부하면 좋을 것 같다.

자료구조와 알고리즘은 우리가 만들고자 하는 프로그램을 더 멋지고 효율적으로 만들어 줄 수 있는 좋은 수단이다.

다음에 공부할 때 꼭 자료구조와 알고리즘을 매일매일 꾸준히 조금씩, 지금 하는 공부와 병렬적으로 공부할 수 있도록 스케줄을 잘 잡아 보면 좋을 거 같다.

기본적인 자료구조와 알고리즘에 대해서 어느 정도 이해가 있는 다음에 온라인 저지 사이트에 가서 문제 푸는 연습을 해보는 게 좋다.

0개의 댓글