본문 바로가기

CS/자료구조6

[자료구조] Stack과 Queue Stack과 Queue 스택(Stack)과 큐(Queue)는 데이터를 임시로 저장하기 위해 디자인된 추상적인 데이터 구조이다. 데이터를 저장하는 순서에 따라 구분된다. # 스택(Stack) 한쪽 끝이 막혀 있는 형태의 저장 공간이다. 데이터가 차곡차곡 쌓아 올려지는 형태로 저장되고, 저장한 자료를 빼낼 때는 마지막으로 저장한 데이터부터 사용하게 된다. 즉, 나중에 저장한 데이터를 가장 먼저 사용하는 데이터 관리 방식인 후입선출 방식(LIFO, Last In First Out)이다. 데이터는 스택의 끝에서만 삽입, 삭제할 수 있으며 스택의 마지막 원소만 읽을 수 있다. 스택 사용 사례 : 웹 브라우저 방문 기록 (뒤로 가기), 실행 취소 등 # 큐 (Queue) 스택과는 달리 양쪽이 열려 있는 형태의 저장.. 2023. 10. 6.
[자료구조] Hash Table Hash Table # 해시 테이블(Hash Table)이란 자료 구조의 한 종류로, key와 value라는 쌍으로 이루어진 값들의 리스트이다. 특정 프로그래밍 언어에만 있는 것이 아닌, 다양한 프로그래밍 언어에서 사용할 수 있는 자료구조이다. 다음은 해시 테이블이 아닌 일반적인 배열이다. list = [ { name: "A", age: 20 }, { name: "B", age: 21 }, { name: "C", age: 22 }, { name: "D", age: 23 }, { name: "E", age: 24 }, ] 만약 이 배열에서 "E"의 나이를 찾고 싶다면, 차례대로 하나하나 확인하는 선형 검색을 해야할 것이다. 그러나 선형 검색은 원소를 하나하나 확인해야 하기에 시간이 오래 걸린다는 단점이 있.. 2023. 5. 3.
[자료구조] 정렬 정렬 정렬되지 않은 배열이 주어졌을 때, 어떻게 오름차순으로 정렬할 수 있을까? 알고리즘에서 정렬의 방식은 크게 3가지로 설명할 수 있는데, 바로 버블 정렬, 선택 정렬, 삽입 정렬이다. 각 정렬이 무엇인지 알아보고 Big O를 비교하며 그 의미를 파악해보자. # 버블 정렬 : 두 개의 아이템 비교 1. 배열의 두 개 아이템을 비교한다. 만약 왼쪽이 오른쪽보다 크다면 순서를 바꾼다. 2. 오른쪽으로 이동하여 다시 두 개의 아이템을 비교한다. 3. 이 동작을 반복한다. 예제 (자료 출처 : https://youtu.be/Bor_CRWEIXo) 1. 5와 2를 비교한다. 5가 2보다 크기 때문에, 순서를 바꾼다. 2. 5와 6을 비교한다. 6은 5보다 작기 때문에, 순서를 바꾸지 않고 다음으로 넘어간다. 3.. 2023. 4. 2.
[자료구조] Big O Big O # 빅 오(Big O) 표기법 알고리즘의 속도는 실제 시간으로 계산하지 않는다. 시간 복잡도라는 개념으로 판단한다. 하나의 과정을 수행하기 위해 총 몇 가지의 단계를 거치는지를 따지는 것이 곧 빠른 알고리즘 / 느린 알고리즘을 판단하는 기준이 된다. 앞서 배열과 검색을 공부하며 N개의 원소가 있는 배열에서 선형 검색을 하면 총 N단계가 걸린다, 라는 표현을 자주 사용하였다. 그러나 이 표현은 상당히 길고 장황하다. 그래서 보다 명료하게 시간 복잡도를 표현하기 위한 표기법을 사용한다. 바로 빅 오 표기법이다. # 빅 오 표기법으로 표현한 시간 복잡도 선형 검색은 N개의 원소를 가진 배열에서 최대 N단계를 거친다. 원소가 100개라면 최대 100단계, 200개라면 최대 200단계를 거친다. 이를 .. 2023. 3. 24.
[자료구조] 선형 검색과 이진 검색 선형 검색과 이진 검색 # 알고리즘 어떤 과제를 완수하는 명령어의 집합을 의미한다. # 정렬된 배열에서의 검색 값이 순서대로 배치된 배열을 정렬된 배열이라고 한다. 정렬된 배열은 일반적인 배열보다 검색이 유리하다. [50, 30, 10, 20, 40] 라는 일반적인(정렬되지 않은) 배열에서 25라는 값을 찾는다고 치자. 이 상황에서는 배열의 처음부터 끝까지 검색을 해야 한다. 그러나 [10, 20, 30, 40, 50]이라는 정렬된 배열에서는 30에 도달했을 때 검색을 멈출 수 있다. 어차피 30뒤에는 30보다 큰 숫자밖에 없기 때문이다. 이렇게 정렬된 배열은 검색 단계를 줄일 수 있다는 장점이 있다. 위에서 사용한 검색 방법은 선형 검색(Linear Search)이다. 그러나 검색 알고리즘에는 선형 검.. 2023. 3. 20.
[자료구조] 배열 배열 # 자료 구조란 자료 구조란 데이터를 조작하는 방법이다. 같은 코드를 작성하더라도 그 코드를 구현하는데에는 다양한 방법이 존재한다. 그리고 코드를 효율적으로 동작시키기 위해서는 그 중에서도 가장 빠른 코드를 작성해야 한다. 그렇다면 무엇이 '더 빠른 코드'인가? 코드의 실행 속도는 코드를 실행하는데 걸리는 시간으로 판단하지 않는다. 같은 코드라도 컴퓨터마다 그 실행 속도가 다르기 때문이다. 코드의 실행 속도는 '코드를 실행하기 위해 몇 단계가 필요한지'로 판단한다. 같은 기능을 구현하는 코드라도 5단계만에 실행이 완료되는 코드보다 3단계만에 실행이 완료되는 코드가 더 빠른 코드가 되는 것이다. 이를 시간 복잡도라고 한다. # 배열 배열은 가장 기초적인 자료 구조이다. 배열의 연산을 통해 코드가 자료.. 2023. 3. 11.