1655 가운데를 말해요

2019. 10. 13. 17:40알고리즘/백준

데이터의 개수가 N이기 때문에 가운데 값을 추출하는데 lgN의 시간으로 해결해야 한다. 우선순위 큐 STL은 top 값만 알 수 있고, 그 뒤의 값은 알 수가 없다. 힙 구조로 되어있기 때문에 최대, 최소값만 알 수 있게 해놓은 것 같다

 

따라서 가운데 값을 한 번에 알기 위해서는 우선순위 큐 2개를 사용하는 것이다. 하나는 최대 힙, 나머지는 최소 힙으로 구성한다. 크기는 최대 힙의 가장 큰 값 < 최소 힙의 가장 작은 값을 유지하는 구조를 가져야 한다. 짝수개의 데이터가 들어왔을 때는 가운데 값 중 작은 값을 추출해야기 때문에 반드시 최대 힙의 가장 큰 값이 테스트 케이스의 답이 된다.

 

1) 두 개의 힙 사이즈가 같다면, 최대 힙으로 넣는다

2) 두 개의 힙 사이즈가 다르다면 최소 힙으로 넣는다

 

두 개의 top을 비교해 바꿔야한다면 바꾼다. 그러고 나면 최대 힙의 top이 답이 된다

 

문제: https://www.acmicpc.net/problem/1655

깃허브주소: https://github.com/surinoel/boj/blob/master/1655.cpp

 

'알고리즘 > 백준' 카테고리의 다른 글

10994 별 찍기 - 19  (0) 2019.10.16
2696 중앙값 구하기  (0) 2019.10.13
1715 카드 정렬하기  (0) 2019.10.13
4796 캠핑  (0) 2019.10.09
2399 거리의 합  (0) 2019.10.09