거누네룸

    [자료구조] Java - 해시테이블(HashTable) 이론정리

    해싱(Hashing)이란? 해싱이란 임의의 길이의 값을 해시함수(Hash Function)를 사용하여 고정된 크기의 값으로 변환하는 작업을 말한다. 해시테이블(HashTable)이란? 해시 테이블은 해시함수를 사용하여 변환한 값을 색인(index)으로 삼아 (Key, Value)로 데이터를 저장하는 자료구조 중 하나로 빠르게 데이터를 검색할 수 있는 자료구조이다. 해시 테이블이 빠른 검색속도를 제공하는 이유는 내부적으로 배열(버킷)을 사용하여 데이터를 저장하기 때문이다. 해시 테이블은 각각의 Key값에 해시함수를 적용해 배열의 고유한 index를 생성하고, 이 index를 활용해 값을 저장하거나 검색하게 된다. 여기서 실제 값이 저장되는 장소를 버킷 또는 슬롯이라고 한다. 이러한 해싱 구조로 데이터를 저..

    @ControllerAdvice를 통한 예외처리 분리, 통합하기

    @ControllerAdvice @ExceptionHandler가 하나의 클래스에 대한 것이라면, @ControllerAdvice는 모든 @Controller 즉, 전역에서 발생할 수 있는 예외를 잡아 처리해주는 annotation이다. 예를들어 모든 jsp(ex. header)에 같은 modelAttribute를 던져줘야 한다면, 아래와 같이 사용하면 된다. @ControllerAdvice public class AdviceController { @ModelAttribute("modelAttribute key값") public String getWhereIP() { return "modelAttribute value값"; }

    [자료구조] 우선순위 큐 remove, poll 메서드에 대해

    프로그래머스 문제를 풀다가 알게된 사실을 기록해봤다. 기본적으로 우선순위 큐에서 poll과 remove 메서드는 poll() : 우선순위가 가장 높은 값 반환 후 제거, 큐가 비어있을때는 null을 리턴 remove() : 우선순위가 가장 높은 값 반환 후 제거, 비어있으면 예외(NoSuchElementException)발생 로 알고있다. 큐가 비어있을 때 poll()을 객체로 사용하면 NPE(Null Pointer Exception)이 발생한다. => 객체로 사용하지않고 그냥 메서드로 사용하면 ex) a.poll(); NPE는 발생X remove메서드는 remove()와 remove(Object o)가 있는데 , remove()는 AbstractQueue 추상 클래스의 remove 메서드를 사용하는 것..

    [자료구조] Java - Heap(힙) 이론정리 + 구현 + Priority Queue(우선순위 큐)

    자료구조 힙(Heap) 이란? 완전 이진 트리(마지막 레벨을 제외하고 모든 레벨이 완전히 채워져 있는 트리의 형태)의 일종으로 우선순위 큐(Priority Queue)를 위하여 만들어진 자료구조 여러 개의 값들 중에서 최대값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조이다. 힙은 형제노드 간의 우선순위를 고려하지 않고 부모 노드와 자식 노드의 키 값만 고려한다. 이러한 정렬 상태를 반정렬 상태 혹은 느슨한 정렬 상태 또는 약한 힙이라고 불린다. 힙 트리에서는 중복된 값을 허용한다. Heap의 종류 최대 힙(max heap) 부모 노드의 키값이 자식 노드의 키 값보다 크거나 같은 완전 이진 트리 key(부모 노드) >= key(자식 노드) 최소 힙(min heap) 부모 노드의 키 값이 자삭 노드의 키..

    [자료구조]Java - Binary Search Tree(이진 탐색트리) 개념 + 구현

    Binary Search Tree란? Binary(이진) Search(탐색) Tree(트리)가 합쳐진 것으로, 즉, 이분화된 탐색을 위한(혹은 특화된) 트리 자료구조라는 뜻이다. 그렇다면 트리가 무엇일까? 위와 같은 구조를 Tree 구조라고 하는데, 거꾸로 보면 나무같이 생겨서 그렇게 부른다고 한다. 여기서 몇 가지 알아야 할 것이 있는데, 그 부분은 아래와 같다. 부모 노드(parent node) : 자기 자신(노드)과 연결 된 노드 중 자신보다 높은 노드를 의미 (ex. F의 부모노드 : B) 자식 노드(child node) : 자기 자신(노드)과 연결 된 노드 중 자신보다 낮은 노드를 의미 (ex. C의 자식노드 : G, H) 루트 노드 (root node) : 일명 뿌리 노드라고 하며 루트 노드는..