이번 문제는 N개의 데이터가 들어올 때, K개의 연속된 값 구간의 중앙값을 구해야 하는 문제입니다.
일반적으로 N개의 정렬되지 않은 데이터가 주어졌을 때, 중앙값을 구하는 것을
N개의 데이터에 K개의 연속된 값 구간은
https://www.acmicpc.net/problem/1572
1572번: 중앙값
중앙값이란, 수열을 정렬했고, 그 크기가 N일 때, 1부터 시작해서 (N+1)/2번째 있는 원소가 그 수열의 중앙값이다. 예를 들어, {1, 2, 6, 5, 4, 3}에서는 3이고, {11, 13, 12, 15, 14}에서는 13이다. 오세준은 1
www.acmicpc.net
저는 자료구조를 이용해서 풀었습니다. 두개의 힙을 만들어서 왼쪽은 최대힙으로 오른쪽은 최소힙으로 만듭니다. 힙은 자료의 추가, 루트 삭제가
i번째 데이터를 읽은 상태에서, 왼쪽힙(LeftHeap)과 오른쪽힙(RightHeap)이 있다면, i+1번째 데이터
이것이 기본적인 제 생각이었지만, 실제 구현을 위해서는 다음을 고려해야 합니다. 힙은 루트 삭제를 빼고는 중간에 있는 값을 빼는 것이 쉽지 않습니다. 인덱스를 추적하는 방식이 있기는 하겠지만, 근본적으로 그렇게 하기 위해서는 별도의 힙 모듈을 작성해주어야 합니다. 그래서 저는 힙에는 인덱스를 저장하고, 삭제는 이미 만료된 인덱스가 힙의 루트에 있는 경우 삭제토록 했습니다.
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #1613 역사(플로이드 와샬) (0) | 2022.09.13 |
---|---|
[C/C++] 백준 #1600 말이 되고픈 원숭이(너비 우선 탐색) (0) | 2022.09.11 |
[C/C++] 백준 #1563 개근상(동적계획법) (0) | 2022.09.06 |
[C/C++] 백준 #1562 계단 수(동적 계획법) (0) | 2022.09.06 |
[C/C++] 백준 #1541 잃어버린 괄호(탐욕 알고리즘) (0) | 2022.09.02 |
댓글