Mgcllee

[자료구조] Heap(힙)의 개념

힙(Heap) 자료구조란 완전 이진 트리를 사용한 자료구조로 주로 우선순위를 표현하기 위해 사용됩니다. 힙의 구현 방법에 따라 최댓값 혹은 최솟값을 빠르게 찾을 수 있습니다. 최댓값을 빠르게 구하기 위한 힙을 최대 힙이라고 하며, 최솟값을 빠르게 구하기 위한 힙을 최소 힙이라고 합니다. 최대 힙 최댓값을 빠르게 구할 수 있는 최대 힙은 루트...

[백준][1197] 최소 스패닝 트리

이 포스트는 백준 사이트의 최소 스패닝 트리 문제 풀이입니다. 문제 해결 과정 이 문제는 Union-Find 알고리즘을 활용한 크루스칼 알고리즘으로 해결할 수 있습니다. 최소 스패닝 트리란, 주어진 그래프의 모든 정점을 연결하는 부분 그래프에서 그 가중치의 합이 최소인 트리를 의미합니다. 그리고 이 트리를 구하기 위한 크루스칼 알고리즘...

[DB] 데이터베이스가 사용하는 인덱스는 무엇일까?

개인 학습을 기록한 내용을 담고 있어 추후 수정될 수 있습니다. 인덱스의 개념 인덱스는 데이터베이스 테이블에서 검색 성능을 향상시키기 위한 자료구조의 이름입니다. 테이블에 있는 특정 칼럼에 대해 인덱스를 생성하면, 해당 칼럼의 데이터들은 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장됩니다. 인덱스가 생성된 이후 입력 받은 쿼리문에서 ...

[백준][7579] 앱

이 포스트는 백준 사이트의 앱 문제 풀이입니다. 문제 해결 과정 이 문제는 DP 테이블을 활용하여 해결할 수 있는 문제입니다. 또 다른 대표 DP 문제인 배낭 문제와 유사하게 메모리 교체 비용의 최소값을 구해야 합니다. 차이점이 있다면 배낭 문제의 경우, 최댓값을 구하는 것이 목표였지만 이 문제에서는 최솟값을 구하는 것이 목표라는 점 ...

[멀티 쓰레드] 교착 상태(Dead Lock)와 해결 방법

이 포스트는 개인 학습을 기록한 내용을 담고 있어 추후 수정될 수 있습니다. 교착 상태란 쓰레드란 프로세스 안에서 존재하는 하나의 실행 단위입니다. 이 실행 단위는 실행 중인 프로그램 안에서 최소 1개 이상이 존재하며 복수의 쓰레드가 동시에 실행될 수 있습니다. 쓰레드는 고유의 스택을 갖고 있기 때문에 함수의 호출로 생성되는 정보들을 저장하...

[알고리즘] 세그먼트 트리 (Segment Tree)

세그먼트 트리는 연속된 데이터에서 특정 범위에 대한 합과 같은 연산이 필요할 때 사용되는 알고리즘 입니다. 예를들어, {5, 8, 7, 3, 2, 5, 1, 8, 9, 7}이라는 배열에서 특정 범위인 (0번부터 시작할 때) 1번부터 9번까지 합을 빠르게 구하려고 합니다. 단순하게 연산한다면 반복문을 통해 순차적으로 방문하여 합을 계산할 수 있습니다...

[백준][2042] 구간 합 구하기

이 포스트는 백준 사이트의 구간 합 구하기 문제 풀이입니다. 문제 해결 과정 이 문제는 세그먼트 트리라는 알고리즘을 사용하면 큰 값이 입력되더라도 빠르게 정답을 구할 수 있습니다. 세그먼트 트리를 사용하지 않고 주어진 명령어에 따라 매번 합을 구하고 숫자를 갱신한다면, 시간초과가 발생합니다. 따라서 임의의 구간별로 합을 미리 계산해 ...