[Data Structures] Stack(스택) 파해치기
·
Algorithm & Data Structures/Data Structures
· Stack(스택)이란?- Stack이란 무엇인가Stack(스택)은 가장 기본적인 선형 자료구조 중 하나입니다.. 프링글스 통이나 접시를 쌓아 놓은 모습을 떠올리면 이해하기 쉽습니다. Stack은 데이터를 한쪽 끝에서만 삽입하고 삭제할 수 있으며가장 나중에 들어온 데이터가 가장 먼저 나가는 LIFO(Last In First Out) 구조를 가집니다.- Stack의 특징Stack은 하나의 입구만 존재합니다.데이터를 넣을 때도 같은 위치, 꺼낼 때도 같은 위치를 사용합니다. 항상 가장 위(Top)의 데이터만 접근할 수 있으며중간 데이터를 직접 접근하는 것은 지원하지 않습니다.- Stack 시간 복잡도연산시간 복잡도PushO(1)PopO(1)PeekO(1) Stack은 Top 위치만 관리하면 되기 때문에 대..
[Data Structures] Queue(큐) 파해치기
·
Algorithm & Data Structures/Data Structures
· Queue(큐) 란?- Queue란 무엇인가Queue(큐)는 가장 기본적인 선형 자료구조 중 하나입니다. 맛집 줄을 서는 모습을 떠올리면 이해하기 쉽습니다.먼저 줄을 선 사람이 먼저 서비스를 받고, 나중에 온사람은 뒤에서 기다리는 구조입니다. 따라서 Queue는 먼저 들어온 데이터가 먼저 나가는 FIFO(First-In-First-Out)의 특징을 가지고 있습니다.- Queue의 특징Queue는 양쪽 끝에서 서로 다른 작업이 이뤄집니다.앞쪽(front): 데이터를 꺼내는 위치뒤쪽(rear): 데이터를 삽입하는 위치Queue에서 데이터는 항상 뒤에서 삽입되고 앞에서만 삭제됩니다. 이러한 구조덕에 입력 순서를 그대로 유지해야 하는 상황에서 많이 사용됩니다.- Queue 시간 복잡도연산시간 복잡도삽입(En..
[Data Structures] Hash 파해치기 (Hash Table, HashMap, HashSet)
·
Algorithm & Data Structures/Data Structures
· 들어가며코딩테스트에서 가장 많이 사용하는 자료구조 중 하나가 바로 Hash입니다. 특히 다음 같은 상황에서 거의 필수적으로 사용해야 합니다. 특정 값이 존재하는지 빠르게 확인해야 할 때문자열이나 숫자의 개수를 세야 할 때중복을 제거해야 할 때방문 여부를 저장해야 할 때Java에서는 이러한 기능을 위해 HashMap과 HashSet을 주로 사용합니다. 그렇다면 HashMap은 왜 빠를까요? 이를 이해하려면 먼저 Direct Address Table이라는 개념부터 살펴봐야 합니다.· Direct Address TableDirect Address Table(직접 주소화 테이블)은 Key를 그대로 배열의 Index로 사용하는 자료구조입니다. 예를 들어 출석번호와 이름을 저장한다고 해보겠습니다.출석 번호이름2..
[Data Structures] 배열(Array) 파해치기 (Static Array, Dynamic Array, ArrayList, 사용)
·
Algorithm & Data Structures/Data Structures
· 들어가며배열(Array)은 가장 기본적인 자료구조이자, 다양한 자료구조들의 기반이 되는 자료구조입니다. 프로그래밍을 하면서도 여러 군데에서 많이 찾아볼 수 있는데,Java의 ArrayList나 Python에서의 List 등 여러 군데에서 배열을 기반으로 구현되어 있는 자료구조들을 확인해 볼 수 있습니다. 배열은 인덱스를 통해 특정 위치의 데이터에 매우 빠르게 접근할 수 있는 장점이 있지만,삽입과 삭제 시에는 추가적인 이후 작업이 필요하기에상대적으로 비효율적이라는 특징을 가지고 있습니다. 이번 시간에는 배열(Array)에 대해서 자세하게 파고들어봅시다.· 배열(Array)이란?배열(Array)이란 동일한 타입의 데이터를 연속된 메모리 공간에 순차적으로 저장하는 자료구조입니다. 배열의 특징은 다음과 같습..
[Data Structures] 자료구조란 ? (선형/비선형 자료구조, 시간 복잡도, 공간 복잡도)
·
Algorithm & Data Structures/Data Structures
· 들어가며 어떤 프로젝트를 진행하든, 취업을 위한 코딩테스트를 준비하든, 그리고 CS 면접을 준비하든 항상 빠지지 않고 등장하는 개념이 있습니다. 바로 자료구조(Data Structure)입니다. 자료구조는 단순히 코딩테스트를 위한 지식이 아닙니다. 실제 개발에서도 데이터를 어떻게 저장하고 관리할지 결정하는 중요한 요소이며, 어떤 자료구조를 선택하느냐에 따라 프로그램의 성능과 효율이 크게 달라질 수 있습니다. 또한 자료구조와 밀접하게 연관된 개념인 시간 복잡도(Time Complexity)와공간 복잡도(Space Complexity) 역시 함께 이해해야 더욱 효율적인 코드를 작성할 수 있습니다. 이번 글에서는 앞으로 다룰 배열(Array), 연결 리스트(Linked List), 스택(Stack), 큐(..