Algorithm & Data Structure/이론
[Data Structure] Priority Queue(우선순위 큐) Java로 구현하기
Priority Queue(우선순위 큐)란? 일반적인 큐의 구조 FIFO(First In First Out)을 가지면서, 데이터가 들어온 순서대로 데이터가 나가는 것이 아닌, 각 요소들이 각각의 우선순위를 갖고있고, 요소들의 대기열에서 우선순위가 높은 요소가 먼저 제공되는 자료구조 Priority Queue를 사용하기 위해서는 우선순위 큐에 저장할 객체는 필수적으로 Comparable Interface를 구현해야한다. Comparable Interface를 구현하면 compareTo 메서드를 오버라이드하게 되는데 해당 객체에서 처리할 우선순위 조건을 리턴해주면 Priority Queue가 알아서 우선순위가 높은 객체를 추출해주는 것이다. 우선순위 큐를 구현하는데 있어 대표적인 구현 방식이 힙을 이용하는 ..
[Algorithm] DP(Dynamic Programming) / 동적 프로그래밍이란?
DP(Dynamic Programming) 이란? 동적 프로그래밍이라고도 불리는 동적 계획법은 분할 정복 기법과 굉장히 유사하다. 분할 정복 기법이란, 알고리즘을 짤 때 큰 문제를 한 번에 해결하지 않고 작은 여러 개의 문제로 나누어서 푸는 기법이다. 이렇게 풀다보면 같은 문제를 반복적으로 풀게되는데, 이를 매번 재계산하지 않고, 값을 저장해두었다가 재사용하는 기법이 바로 동적 계획법이다. 동적 계획법의 종류 Top-down - 하향식 계산법 - 큰문제부터 시작해 작은 문제로 분할 - 메모제이션 : 동일한 계산을 반복해야 할 경우, 한 번 계산한 결과를 메모리에 저장해두었다가 꺼내씀으롰 중복계산방지를 할 수 있게 하는 기법으로, 동적 계획법의 핵심 기술이다. 즉, 메모리라는 공간비용을 늘림으로써 계산에 ..
[Data Structure] 큐(Queue)란?
큐(Queue) 란? Queue는 차례를 기다리는 사람이나 승용차의 열 이라는 의미도 가지고 있는데, 이런 대기열은 줄을 선 순서대로 앞에서 부터 빠져나가게 된다. 이처럼 큐는 나중에 집어넣은 데이터가 먼저나오는 스택과는 반대되는 개념으로, 가장 먼저 들어온 데이터가 가장 먼저 나가게 되는 구조이다. 따라서 큐는 '선입선출 방식의 자료구조', 또는 'FIFO(First in First Out)의 자료구조 라고 한다. 데이터를 넣는 것은 Enqueue, 반대로 데이터를 꺼내는 것을 Dequeue 라고 하며 새로운 데이터가 들어가는 위치는 가장 뒤인 Back에 들어가게되고, 데이터 나가는 위치는 가장 앞인 Front에서 꺼낸다. 큐 연산 - enqueue : 큐에 데이터를 저장함 - dequeue : 큐의 ..
[Data Structure] 스택(Stack)이란?
스택(Stack) 이란? - 스택은 접근하는 것이 제한되어있는 나열 구조 - 삽입과 삭제가 목록의 끝인 "Top"에서만 가능하다. 쉽게 생각해서 말그대로 stack, 쌓여있는 것으로 예를 들어, 바닥에 동전을 여러개 쌓아올린다고 했을때 다시 동전을 치우려면 가장 나중에 쌓은 동전부터 치울 수 밖에 없다. 이처럼 스택은 한쪽이 막힌 구조라, 나머지 한 쪽에서만 넣고 뺄 수 있어 나중에 들어간 것이 먼저 나올 수 밖에 없는 구조이다. 그래서 스택은 '후입선출 방식의 자료구조', 또는 'LIFO(Last-In, First Out) 구조의 자료구조' 라고도 불린다. 자료를 넣는 것을 푸쉬(push), 반대로 꺼내는 것을 팝(pop)이라고 한다. 스택 연산 - pop() : 스택의 가장 윗 데이터(마지막에 저장된..