[알고리즘] 힙(heap) 자료구조
·
Algorithm
힙이란?데이터에서 최댓값과 최솟값을 빠르게 찾기 위해 고안된 완전 이진 트리 우선순위 큐를 위해 만들어진 자료구조이다. 이진 트리한 노드가 최대 두개의 노드를 자식으로 가질 수 있는 트리마지막 레벨을 제외한 모든 레벨에는 노드들이 가득차있고, 마지막 레벨의 노드들돠 좌측부터 순서로 들어가있는 형태의 이진트리를 완전 이진 트리라고 한다. 우선순위 큐큐: FIFO 형식의 자료구조우선순위 큐는 큐에 우선순위라는 개념을 접목시킨 자료구조이다.우선순위 큐는 먼저 들어오는 데이터가 아니라, 우선순위가 높은 데이터가 먼저 나가는 형태의 자료구조이다. 힙힙: 우선순위 큐를 위해 고안된 완전이진트리 형태의 자료구조부모 노드의 키 값이 자식 노드의 키 값보다 항상 큼/ 작음이진 탐색 트리와 달리 중복된 값이 허용..
[알고리즘] 분할정복 알고리즘
·
Algorithm
분할정복 알고리즘은 문제를 작게 분할한 후 각각을 정복하는 알고리즘이다.큰 문제를 작은 문제로 분할하여 각각을 해결하고, 그 결과를 이용해 전체 문제를 해결한다. 분할된 작은 문제를 재귀적으로 해결하고, 이를 결합하여 원래 문제를 해결한다.이진 탐색, 병합 정렬, 퀵 정렬 등이 모두 분할 정복 알고리즘이다.  정렬 알고리즘최대 실행 시간최소 실행 시간 평균 실행 시간선택 정렬O(n^2)O(n^2)O(n^2)삽입 정렬O(n^2)O(n)O(n^2)합병 정렬O(nlogn)O(nlogn)O(nlogn)퀵 정렬O(n^2)O(nlogn)O(nlogn)   1. 나누기 (분할)- 문제를 더 작은 하위 문제로 더 이상 쪼개질 수 없을 때까지 나눈다 2. 재귀적으로 해결 (정복)- 하위 문제를 재귀적으로 해결한다. 3...
[알고리즘] 이진탐색 알고리즘
·
Algorithm
이진탐색 (binary Search) 알고리즘은 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법이다.처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식을 사용한다.중간값을 이용하기 때문에, 배열 내부의 데이터가 정렬되어 있을 때 사용할 수 있다.   1. 배열의 중간 값을 가져온다. 2. 중간 값과 검색 값을 비교한다 1) 중간 값이 검색 값과 같다면 종료한다. (mid=key)\ 2) 중간 값보다 검색 값이 크다면 중간값 기준 배열의 오른쪽 구간을 대상으로 탐색한다. (mid 3) 중간 값보다 검색 값이 크다면 중간값 기준 배열의 왼쪽 구간을 대상으로 탐색한다. (mid>key) 3. 값을 찾거나 간격이 비어있을 때 까지 반복한다..
하노이탑 알고리즘 이해하기 (재귀함수 사용)
·
Algorithm
장대 위에 n개의 원판이 있는 경우크게 총 3단계로 이루어짐! 1. n-1개의 원판을 2번 장대(중간 장대)로 이동시킨다.2. 가장 밑에 있던 n번째 원판을 3번 장대(목표 장대)로 이동시킨다. 3. 2번 장대의 n-1개의 원판을 3번 장대(목표 장대)로 이동시킨다. private static void hanoi(int n, int start, int mid, int end) { if (n == 1) { //남아있는 원판이 1개인 경우 System.out.println(start + " " + end); return; } hanoi(n - 1, start, end, mid); //원판을 중간 장대로 이동 Sys..
[알고리즘] 브루트포스 알고리즘
·
Algorithm
장점- 모든 경우를 다 고려하기 때문에 확실하게 정답 찾을 수 있음- 복잡한 알고리즘 X, 빠르게 구현 가능 -> 알고리즘이라기 보다는 ... 모든 경우 다 따지며 해 찾는 방식 단점- 효율적이지 않다.- 시간이 오래 걸린다. import java.util.ArrayList;import java.util.List;public class baekjoon_4673 { public static void main(String[] args) { int N = 10000; List list = new ArrayList(); for (int i = 1; i 기존 풀이 .. 시간 마니 잡아먹음   public class baekjoon_4673_2 { public sta..
stack 메서드 구현
·
Algorithm
STACK이란?가장 뒤에 들어온 것이 가장 먼저 나가는 구조라는 뜻으로 LIFO(후입선출)의 별칭을 가진다.맨 위의 원소만 접근 가능한 것이 특징이며, 선형 자료구조이다.(ex) 키보드 입력을 하다가 백스페이스 키를 누르면 최근에 입력한 글자를 지운다. STACK의 연산push(item) : 맨 위에 원소 삽입pop() : 맨 위의 원소 삭제peek() / top() : 맨 위 원소 반환 (삭제 X)clear() : 원소 모두 삭제empty() : 스택이 비었으면 true, 아닐 경우 false full() :가득 차있으면 true, 아닐 경우 falsesize() : 스택의 크기(원소의 개수) 반환search(item): 해당 원소를 찾아서 빠져나오는 순서 반환 구현 방법java.util.s..