자료구조(Data Structure)란?
자료구조: 여러 데이터들의 묶음을 저장하고, 사용하는 방법을 정의한 것
데이터(Data)란?
- 문자, 숫자, 소리, 그림, 영상 등 실생활을 구성하고 있는 모든 값
- 우리의 이름, 나이, 키, 집 주소, 목소리 혹은 유전자 DNA까지 데이터로 분류할 수 있음
- 그러나 데이터는 그 자체만으로 어떤 정보를 가지기 힘들고, 분석하고 정리하여 활용해야만 의미를 가짐
- 예를 들어 나이라는 데이터만 알고 있다면, 사람의 나이인지, 강아지의 나이인지, 나무의 나이인지 알 수 없음
데이터를 사용 목적에 따라 분류하여 사용하는 이유
데이터를 정해진 규칙없이 저장하거나, 하나의 구조로만 정리하고 활용하는 것보다 데이터를 체계적으로 정리하여 저장해두는 게, 데이터를 활용하는 데 있어 훨씬 유리함
만약 서로 다른 형태의 데이터를 하나의 방법으로만 정리하고 활용한다고 가정해보자.
전화번호부를 작성할 때처럼, 숫자를 3개 또는 4개씩 묶음짓고 하이픈(-)으로 쳐서 저장한다고 하자. 이 숫자의 묶음에 이름을 붙여 보관해야 한다면, 해당 데이터를 꺼낼 때에는 항상 특정 이름을 입력해야 숫자를 얻을 수 있다. 전화번호부를 만든다면 그대로 사용해도 무방하지만, 거리를 구하거나 다섯 자리가 넘는 숫자를 보관해야 할 때에는 하이픈(-)이 필요하지 않다. 이런 방법으로 숫자 데이터를 저장한다면, 모든 숫자에 필요하지도 않은 이름을 붙여야 한다. 이처럼 필요에 따라 데이터의 특징을 잘 파악(분석)하여 정리하고, 활용해야 하는데, 이를 연구하고 정리해둔 방법의 모음을 자료구조라고 한다.
선배 개발자들이 이미 연구하고 정리해둔 자료구조를 활용하여 무수한 상황에서 데이터를 효율적으로 다룰 수 있다.
우리는 이 많은 방법 중에서, 가장 많이 쓰이고 알고리즘 테스트(코딩 테스트)에 자주 등장하는 네 가지를 학습할 것이다.
무수한 상황의 예시
번호를 다 알지 않아도, 이름을 아는 것만으로 전화를 할 수 있는 방법은 무엇이 있을까?
- 웹 브라우저에서 뒤로 / 앞으로 가는 방법은 무엇이 있을까?
- 게임 매칭을 잡을 때, 수많은 사람들을 통제하는 방법엔 무엇이 있을까? ...등등
자주 등장하는 네 가지의 자료구조
Stack, Queue, Tree, Graph
대부분의 자료구조는 특정한 상황에 놓인 문제를 해결하는 데에 특화되어 있다. 따라서 많은 자료구조를 알아두면, 어떠한 상황이 닥쳤을 때 적합한 자료구조를 빠르고 정확하게 적용하여 문제를 해결할 수 있다. 이것은 문제 해결력을 필요로하는 알고리즘 테스트(코딩 테스트)와 굉장히 밀접한 연관성이 있다. 특정 문제를 해결하는 데에 적합한 자료 구조를 찾아 데이터를 정리하고 활용할 줄 알면, 상황에 가장 적합하고 정확한 코드를 작성할 수 있다.
Roadmap
- 각 자료구조가 가진 특징을 학습한다.
- 각 자료구조를 사용하기 적합한 상황을 이해한다.
- 다른 자료구조와의 차이점을 이해하기 위해 자료구조 내부를 직접 구현한다.
- 자료구조를 구현하며, 자료구조의 동작원리를 이해한다.
1. class 키워드를 사용하여 자료구조의 데이터 타입을 직접 정의한다.
이 과정에서 필요한 속성과 메서드를 학습한다.
// class 키워드의 예
class Person {
consturctor(name, hand, foot) {
this.name = name
this.hand = hand;
this.foot = foot;
}
speak() {
return `저는 ${this.name}입니다.`}
}
const kimcoding = new Person('김코딩', 2, 2);
console.log(kimcoding.speak()); // '저는 김코딩입니다.'
[코드] class 키워드의 예시 Person 클래스
2. 자료구조를 활용해 알고리즘 문제를 푼다.
알고리즘 문제를 마주했을 때 문제를 풀기에 적합한 자료구조를 파악하고, 그에 알맞게 자료구조를 사용해야 한다. 자료구조를 학습하기 시작한 지금, 문제를 마주하고 어떤 자료구조를 사용할지 결정할 수 없다. 그리고 알고리즘 문제를 만날 때마다 필요한 자료구조를 클래스로 직접 정의해서 풀기에는 다소 많은 시간이 소요된다. 테스트 시간이 무제한이라면 상관없지만, 대부분의 알고리즘 테스트에는 제한 시간이 존재한다.
여기서는 테스트에 걸리는 시간을 단축하고 알고리즘 문제 풀이에 집중하기 위해, JavaScript에서 제공하는 배열(Array)과 같은 데이터 타입을 이용해 자료구조의 형태와 유사하게 구현하여 보다 간단한 방식으로 문제를 해결하고자 한다.
'CS > Data Structure' 카테고리의 다른 글
[자료구조] 큐 (Queue) - 프린터 with Javascript (0) | 2022.05.13 |
---|---|
[자료구조] 큐 (Queue) - 박스포장 with Javascript (0) | 2022.05.13 |
[자료구조] 큐 (Queue) - 정의, 특징, 그리고 자바스크립트로 구현하기 (0) | 2022.05.13 |
[자료구조] 스택 (Stack) - 브라우저 뒤로가기 앞으로가기 with Javascript (0) | 2022.05.13 |
[자료구조] 스택 (Stack) - 정의, 특징, 그리고 자바스크립트로 구현하기 (0) | 2022.05.13 |