Java 17

Greedy

그리디 알고리즘(Greedy Algorithm) 그리디 알고리즘은 문제를 해결할 때, 매 단계에서 최선의 선택을 하는 알고리즘입니다. 이 알고리즘은 전체 문제를 해결하기 위한 국소 최적화(local optimum)를 선택하며, 이를 통해 전체 문제의 전역 최적화(global optimum)를 달성한다고 가정합니다. 그리디 알고리즘은 일반적으로 탐욕적인 선택이 항상 최적의 해결책으로 이어지는 문제에 적합합니다. 그리디 알고리즘의 특징1. 현재 상황에서 최적이라고 생각되는 선택을 한다: 그때그때 가장 좋은 선택을 하기 때문에 미래를 고려하지 않습니다.2. 문제를 해결할 수 있는 "단계적" 접근 방식을 사용합니다.3. 그리디 알고리즘이 항상 최적해를 보장하는 것은 아니므로, 이 알고리즘을 적용할 수 있는 문제..

Dev/Algorithm 2024.12.30

완전탐색

완전탐색 알고리즘 (Brute Force Algorithm)완전탐색 알고리즘은 주어진 문제의 모든 가능한 해를 탐색하여 최적의 해를 찾는 방법입니다. 이 방법은 가능한 모든 경우를 하나하나 대입하거나 확인하는 방식으로 동작합니다. 일반적으로 완전탐색은 최적화된 알고리즘에 비해 비효율적일 수 있지만, 문제의 크기가 작거나 해가 존재하는 범위가 제한적일 때 유용하게 사용됩니다. 완전탐색의 특징- 모든 가능한 경우를 고려: 문제에 대한 모든 가능한 해결책을 찾으므로, 정확한 해를 보장합니다.- 효율성: 경우의 수가 많을수록 시간 복잡도가 기하급수적으로 증가할 수 있어 비효율적입니다.- 간단한 구현: 문제의 해법을 구체적으로 정의할 수 있을 때 비교적 구현이 간단합니다. 완전탐색 알고리즘이 사용될 수 있는 문제..

Dev/Algorithm 2024.12.23

Hash

해시맵 (HashMap)과 해시셋 (HashSet)HashMap과 HashSet은 모두 자바에서 java.util 패키지에 포함된 컬렉션 클래스입니다. 둘 다 해시 테이블을 기반으로 하며, 빠른 검색, 삽입, 삭제 등을 지원합니다. 그러나 이 둘은 목적과 사용 방식에서 차이가 있습니다.1. HashMapHashMap은 키와 값의 쌍으로 데이터를 저장하는 컬렉션입니다. 이 클래스는 해시 테이블을 사용하여 키를 기반으로 값을 검색하거나 삽입할 때 매우 효율적입니다.- 키와 값: 각 항목은 키-값 쌍으로 저장됩니다.- 순서 없음: HashMap은 저장된 순서를 보장하지 않습니다. 즉, 입력된 순서와는 관계없이 요소가 저장될 수 있습니다.- 중복된 키 불허: HashMap은 동일한 키를 여러 번 저장할 수 없으..

Dev/Algorithm 2024.12.19

정렬

1. 버블 정렬 (Bubble Sort)   - 작동 원리: 인접한 두 원소를 비교하여 크기가 잘못된 순서일 경우 서로 교환하는 방식으로 정렬합니다. 이 과정을 반복하여 전체 리스트가 정렬될 때까지 진행합니다.   - 시간 복잡도: 최악과 평균 시간 복잡도는 O(n²), 최선은 O(n) (이미 정렬된 경우)   - 공간 복잡도: O(1) public class BubbleSort { public static void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i arr[j + 1]) { // Swap arr[j] and arr[j + 1] ..

Dev/Algorithm 2024.12.16

Queue

1. offer(E e)설명: 큐의 뒤쪽에 요소를 추가합니다. 큐가 공간이 부족하거나 특정 조건에서 삽입이 불가능할 경우 false를 반환할 수 있습니다.반환값: true (요소가 성공적으로 삽입되었을 때), false (삽입 실패) 사용 예시:Queue queue = new LinkedList();queue.offer(1); // 큐에 1을 추가queue.offer(2); // 큐에 2를 추가2. poll()설명: 큐의 앞쪽에서 요소를 꺼내면서 삭제합니다. 큐가 비어 있을 경우 null을 반환합니다.반환값: 큐에서 꺼낸 요소 (큐가 비어 있으면 null)사용 예시:Integer element = queue.poll(); // 큐에서 첫 번째 요소를 꺼내고 삭제System.out.println(el..

Dev/Algorithm 2024.11.14

BFS

BFS(너비 우선 탐색, Breadth-First Search) 알고리즘BFS는 그래프 또는 트리에서 너비 우선으로 노드를 탐색하는 알고리즘입니다. BFS는 시작 노드에서 출발하여, 그 노드와 연결된 노드들을 먼저 모두 탐색하고, 그 후에 각 노드에서 연결된 노드를 차례대로 탐색합니다. 이 과정은 큐(Queue) 자료구조를 이용하여 구현합니다.BFS의 주요 특징은 가까운 노드부터 차례대로 탐색하므로, 목표 노드까지의 최단 경로를 찾는 데 유용합니다. BFS 동작 방식:1. 시작 노드를 큐에 넣습니다.2. 큐에서 노드를 하나 꺼내고, 그 노드를 방문합니다.3. 그 노드에 연결된 인접 노드들을 큐에 넣습니다.4. 큐가 비어 있을 때까지 2번과 3번을 반복합니다.5. 모든 노드를 방문할 때까지 탐색을 계속합니..

Dev/Algorithm 2024.11.13

DFS

DFS(Depth-First Search, 깊이 우선 탐색) 알고리즘 DFS는 그래프나 트리에서 깊이 우선으로 노드를 탐색하는 방법입니다. DFS는 한 번에 가능한 한 깊이 내려가다가 더 이상 내려갈 곳이 없으면 이전 단계로 돌아가서 다른 경로를 탐색하는 방식입니다. DFS는 트리나 그래프의 구조를 탐색할 때 유용하며, 경로 탐색, 미로 찾기, 사이클 탐지 등의 문제에서 활용될 수 있습니다. DFS 동작 방식:1. 시작 노드에서 시작하여, 그 노드와 연결된 노드들을 깊이 우선으로 탐색합니다.2. 방문한 노드는 다시 방문하지 않도록 표시합니다.3. 더 이상 방문할 노드가 없으면, 이전 노드로 돌아가서 탐색을 계속합니다.4. 모든 노드를 탐색할 때까지 이 과정을 반복합니다.DFS의 특징:- 시간 복잡도: 그..

Dev/Algorithm 2024.11.13