자료구조와 알고리즘을 배우는 이유
자료구조와 알고리즘은 프로그래밍 언어로 코드를 한 줄 이상 작성하는 모든 개발자들이 기본적으로 알고 있어야 되는 지식이다. (수학으로 따지면 기본 개념, 원리)
이 기본 지식에 대한 기본적인 이해가 있어야 만들고자 하는 프로그램 또는 구현하고자 하는 기능을 보다 쉽고 효율적으로 만들 수 있다.
프로그래밍 언어는 컴퓨터 프로그래밍에서 어떠한 알고리즘을 구현하기 위해서 쓰여지는 언어이다.
(*HTMl은 마크업 언어이고, CSS는 Style Sheet 언어 이기 때문에 이 두 가지는 프로그래밍 언어에 포함되지않음)
여기서 많은 사람들이 '자료구조와 알고리즘에 대해서 공부하기 = (흔히 이직이나 취직에서 요구하는)코딩 테스트 문제 푸는 연습하기'로 오해하는데, 이것은 마치 우리가 수학에 대한 기본 개념, 원리, 공식에 대한 공부가 전혀 없이 수학 실전 문제집을 사서 문제 푸는 연습을 하는 것이랑 똑같다.
그리고 현업에서 프로젝트를 할때는, 대부분은 언어나 프레임워크나 라이브러리에서 이미 잘 만들어진 것들을 가져와서 우리가 만들고자 하는 기능에 맞게 가장 적합하고 효과적인 것들을 쏙 가져와서 쓰는 경우가 대부분이기 때문에, 이런 코딩테스트 같은 문제를 푸는 일은 거의 없다.
그럼 그런데 왜 많은 기업들은 코딩테스트로 심사를 하는 것일까?
면접에서 코딩테스트를 보는 이유는, 물론 얼마나 정확하고 효율적으로 작성 했는지 채점을 하기 위함도 있겠지만, 대부분은 질의 응답을 통해서 이 알고리즘을 작성한 사람이 자료구조와 알고리즘에 대해서 얼마나 이해하고 있고, 시간과 공간복잡도에 대한 이해가 있는지 확인해보기 위해서이다.
가령 코딩 테스트에서 어떤 알고리즘을 작성한 후, 면접관이 다른 알고리즘도 있는데, 하필 이것을 선택한 이유는 무엇인가? 이것이 다른것들에 비해서 어떤 장점과 단점이 있는가? 라고 물어 볼 수 있다.
그래서 자료구조와 알고리즘에 대한 전반적인 이해를 먼저 하고 그 뒤에 코딩 테스트 문제 푸는 연습을 하는 것이 좋다.
자료구조
자료구조는 컴퓨터 과학에서 효율적인
접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다. 더 정확히 말해, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다.
자료구조 공부를 통해 서비스나 어플리케이션에서 필요한 데이터를 메모리에 구조적으로 잘 정리해서 담아두고, 관리할 수 있으며, 가장 효율적인 방식으로 필요한 데이터에 빠르게 접근 또한 수정, 삽입, 삭제를 하는 방법을 배울 수 있다.
서비스에서 클라이언트에게 데이터를 제공하거나 어플리케이션에서 사용자에게 필요한 데이터를 보여 주거나 수정할 때 효율적으로 일을 처리하기 위해서는 기능에 적합한 알맞는 자료구조를 쓰는 것이 정말 중요하다. 어떤 자료구조를 쓰냐에 따라서 사용자가 원하는 기능을 수행하는데 0.2초가 걸릴 수도 2초가 걸릴 수도 있기 때문이다. 자료 구조 종류는 굉장히 다양한데, 대표적으로 배열, 단일 연결리스트, 이중 연결 리스트, 스택, 해쉬 테이블 등이 있다.
자료구조를 공부할 때 포인트를 두고 공부하면 좋은 것은,
- 자료 구조 안에 있는 데이터들의 순서가 보장이 되는지
- 중복된 데이터가 들어갈 수 있는지
- 검색할 때 얼마나 효율적인지
- 우리가 원하는 기능에 따라서 수정할 때 얼마나 효율적인지
알고리즘
알고리즘은 제한된 공간과 시간 안에서 데이터를 어떻게 처리할 것인지를 정해놓은 로직.
즉 '주어진 인풋으로 정의된 계산을 수행한 다음에 아웃풋 결과값을 내는 것'
좋은 알고리즘은 제공된 데이터를 가능한 작은 공간과 가능한 빠른 시간안에 효율적으로 처리할 수 있는 알고리즘이다.
알고리즘을 공부할 때 잡고 가면 좋은 포인트는,
- Input의 사이즈가 커질수록 Big-O가 어떻게 변화하는지
(*Big-O는 동일한 알고리즘의 로직으로 계산할때 Input의 사이즈가 점점 커질수록, 시간이 얼마나 더 많이 걸리느냐를 정의한 시간 복잡도를 나타내는 표기법이다.) - 공간 복잡도와 시간 복잡도는 어떤지
- 어떤 자료 구조를 이용해서 이 알고리즘을 쓰는게 좋은지 등
자료구조와 알고리즘을 공부하면서 어떻게 구현하면 되는지 하나하나 실제로 구현할 수 있는 수준까지 공부하면 좋겠지만, 시간이 없다면 이 자료구조는 어떤 상황에 쓰이는게 좋은지, 또 어떤 식의 API들이 있는지 등 큰 그림을 보면서 공부하는 것이 좋다. 자료구조와 알고리즘은 만들고자 하는 프로그램을 더 멋지고 효율적으로 만들어 줄 수 있는 좋은 수단이니, 전문 분야와 병렬적으로 공부하면 좋다.
기본적인 자료구조와 알고리즘에 대해 어느정도 이해를 한 후 코딩 테스트 문제 푸는 사이트에서 문제 푸는 연습을 하면 좋다. (leetcode.com, hackerrank, programmers 등)
https://www.youtube.com/watch?v=okHGRlgR8ps&t=519s&ab_channel=%EB%93%9C%EB%A6%BC%EC%BD%94%EB%94%A9by%EC%97%98%EB%A6%AC
'대학공부' 카테고리의 다른 글
C언어 정수자료형 (0) | 2021.09.23 |
---|---|
파이썬 라이브러리 BeautifulSoup의 의미 (0) | 2021.09.15 |
알고리즘 기초 (0) | 2021.09.03 |
HTML 기초 (0) | 2021.06.25 |
자바스크립트(용도, 오픈소스) (0) | 2021.03.04 |