Stack이란?Java에서 Stack은 후입선출(LIFO, Last In First Out) 방식으로 요소를 관리하는 자료구조입니다.새로운 요소가 추가될 때마다 스택의 가장 상단에 쌓이며, 데이터를 꺼낼 때는 가장 최근에 추가된 요소부터 제거됩니다.Stack의 사전적 정의'쌓다', '쌓이다'로 물건을 쌓아 올리는 것처럼 데이터를 순서대로 쌓는 자료구조입니다.Stack의 주요 특징후입선출(LIFO) : Stack은 가장 최근에 추가된 요소가 가장 먼저 제거됩니다.Vector 기반 구현 : Java의 Vector 클래스를 상속받아 구현되었으며, 모든 기능을 활용할 수 있습니다.동기화 지원 : Vector를 상속받았기 때문에 기본적으로 동기화되어 있으며, 멀티스레드 환경에서도 안전하게 사용할 수 있습니다.단방..
Java Vector : 멀티스레드 환경에서 안전한 리스트 구현체Java에서 Vector는 List 인터페이스를 구현한 동기화된(synchronized) 자료구조입니다. Vector는 동시성 제어가 필요한 멀티스레드 환경에서 안전하게 사용할 수 있는 리스트 구현체로, ArrayList와 유사한 구조를 가지고 있습니다.Vector란?Vector는 Java의 초기부터 존재했던 클래스로, List 인터페이스를 구현하며, 동기화(synchronization)가 보장되는 특징을 가집니다. Vector는 ArrayList와 유사하게 동적 배열을 기반으로 하지만, 내부의 모든 메서드가 동기화되어 멀티스레드 환경에서 안전하게 동작합니다.Vector의 주요 특징동기화된 메서드 : Vector의 모든 메서드는 동기화되어 ..
선택 정렬[Selection Sort]선택 정렬은 정렬 알고리즘 중에서 이해하기 쉽고 기본적인 알고리즘 중 하나입니다. 선택 정렬은 배열에서 가장 작은(또는 가장 큰) 원소를 찾아서 정렬되지 않은 부분의 첫 번째 원소와 교환하는 과정을 반복하는 방식으로 동작합니다.가장 작거나 큰 원소를 선택하고 그 위치를 바꿔주기 때문에 선택 정렬이라는 이름을 사용합니다.선택 정렬의 특징선택 정렬은 비교 정렬에 속하며, 제자리 정렬(in-place sort)입니다. 즉, 추가적인 메모리 공간을 거의 사용하지 않고, 주어진 배열 안에서 원소를 교환하여 정렬을 수행합니다. 선택 정렬은 대규모 데이터 세트에는 비효율적일 수 있지만, 알고리즘의 동작 원리를 이해하는 데 매우 유용한 도구입니다.선택 정렬의 과정이 과정은 정렬되지..
위상정렬사이클이 없는 방향 그래프(DAG)의 모든 노드를 방향성에 거스르지 않도록 순서대로 나열하는 것입니다.진입 차수(Indegree) : 특정한 노드로 들어오는 간선의 개수진출 차수(Outdegree) : 특정한 노드에서 나가는 간선의 개수큐를 이용하는 위상 정렬 알고리즘의 동작 과정진입차수가 0인 모든 노드를 큐에 넣습니다.큐가 빌 때까지 다음의 과정을 반복합니다.큐에서 원소를 꺼내 해당 노드에서 나가는 간선을 그래프에서 제거합니다.새롭게 진입차수가 0이 된 노드를 큐에 넣습니다.결과적으로 각 노드가 큐에 들어온 순서가 위상 정렬을 수행한 결과와 같습니다.위상 정렬 특징위상 정렬은 DAG에 대해서만 수행할 수 있습니다.DAG(Direct Acyclic Graph) : 순환하지 않는 방향 그래프위상 ..
Bubble Sort(버블 정렬)이란?버블 정렬은 정렬 과정에서 원소의 이동이 마치 거품이 수면 위로 올라오는 것과 같다고 해서 '버블'이라는 이름이 붙여졌습니다.버블 정렬은 정렬 알고리즘 중 가장 간단한 알고리즘 중 하나로, 두 개의 인접한 원소를 비교해서 정렬하는 방식으로 정렬합니다.보통 버블 정렬은 구현이 간단하지만 비효율적이므로, 교육용으로 알고리즘의 기본 개념을 설명하거나 작은 데이터셋에 사용하고 있습니다.사용 사례대규모 데이터에는 적합하지 않기 때문에 데이터 셋이 작은 경우에 사용합니다.초기 프로그래밍 교육 시 자료로 사용합니다.버블 정렬의 특징버블 정렬은 데이터를 비교하면서 찾기 때문에 비교 정렬이며,정렬의 대상이 되는 데이터 외에 추가적인 공간을 거의 필요로 하지 않기 때문에 '제자리 정렬..
Java LinkedList : 효율적인 데이터 삽입과 삭제를 위한 연결 리스트Java에서 LinkedList는 List 인터페이스를 구현한 또 다른 중요한 자료구조입니다. LinkedList는 이중 연결 리스트(doubly linked list)로 구현되어 있어, 삽입과 삭제가 빈번한 경우 특히 유용합니다.LinkedList란?LinkedList는 List 인터페이스와 Deque 인터페이스를 구현한 클래스입니다. 이 자료구조는 이중 연결 리스트를 기반으로 하며, 각 요소가 자신과 다음 요소의 참조(reference)를 포함한 노드(node)로 구성됩니다. 배열과 달리 요소들이 물리적으로 연속된 위치에 저장되지 않으며, 삽입 및 삭제 작업이 효율적으로 수행됩니다.LinkedList의 주요 특징빠른 삽입과..
🌈 반복문 개요반복문은 특정 조건을 만족하는 동안 동일한 코드 블록을 반복 실행하는 구조입니다. 자바에서는 대표적으로 for문, while문, do-while문이 있으며, 반복 구조와 조건 검사 위치에 따라 동작 방식이 달라집니다.✈️ for문 - 반복 횟수가 정해진 경우for문은 반복 횟수를 알고 있을 때 사용하기 적합합니다. 기본 구조는 아래와 같습니다.조건식이 참일 때마다 블록 내 문장이 반복적으로 수행되며, 조건식이 거짓이 될 때 반복문을 탈출합니다.for(초기화; 조건식; 증감식) { // 조건식이 참일 때 수행될 문장을 작성합니다.}for문의 구성 요소초기화 : 반복문에 사용할 변수를 선언하고 초기화합니다. (반복문 실행 시 최초 1회만 수행)조건식 : 반복을 계속할 조건을 설정하며, ..
ArrayList란? ArrayList 클래스는 Java의 List 인터페이스를 구현한 가장 많이 사용하는 클래스 중 하나로, Array와 List의 장점을 결합한 자료구조입니다. 기본적으로 크기가 고정된 배열과 달리, ArrayList는 요소가 추가됨에 따라 자동으로 크기가 확장되며, 이로 인해 데이터를 동적으로 관리할 수 있습니다. ArrayList는 내부적으로 배열을 사용하여 데이터를 저장하지만, 이 배열의 크기가 가득 차면 새로운 크기의 배열을 생성하고 기존 배열의 요소들을 복사하여 관리합니다. ArrayList의 주요 특징동적 크기 조정: ArrayList는 데이터가 추가됨에 따라 자동으로 크기를 확장합니다. 배열의 경우 고정된 크기를 가지지만, ArrayList는 필요에 따라 크기가 조정되어 ..
Java의 List 인터페이스List 인터페이스란?Java에서 List 인터페이스는 순서가 있는 데이터를 다루기 위한 자료구조를 정의하는 핵심 인터페이스입니다.List 인터페이스는 Collection 인터페이스를 확장하며, 데이터 삽입 순서를 유지하고 중복된 요소를 허용하는 선형 자료구조입니다.List 인터페이스는 배열과 유사하게 인덱스를 사용하여 요소에 접근할 수 있으며, 크기가 동적으로 조정됩니다.그리고 자료구조 Set과 달리 List는 중복된 요소를 허용하며, 요소의 순서가 중요한 경우에 사용됩니다.주요 특징순서 유지 : 요소가 삽입된 순서를 그대로 유지합니다. 데이터를 순차적으로 관리할 수 있습니다.중복 허용 : 동일한 값을 가진 요소를 여러 번 포함될 수 있습니다.인덱스 접근 : 배열처럼 인덱..
자료구조와 알고리즘알고리즘과 코딩 테스트를 준비할 때, 자료구조는 반드시 이해하고 넘어가야 하는 핵심 개념입니다. 자료구조는 데이터를 저장하고 조직화하는 방식으로, 알고리즘은 이 데이터를 처리하는 절차입니다. 문제 해결을 위해 적절한 자료구조를 선택하는 것을 효율적인 알고리즘을 구현하는 데 필수적입니다. 특히, Java 컬렉션 프레임워크는 문제를 해결할 때 적절한 자료구조를 선택하는 것은 효율적인 알고리즘을 구현하는 데 중요한 역할을 합니다.자료구조의 기본 분류자료구조는 크게 선형 자료구조(Linear Data Structure)와 비선형 자료구조(Nonlinear Data Structure)로 나뉩니다.선형 자료구조(Linear Data Structure)데이터가 일렬로 연결된 형태입니다.선형 자료구조..