백준 1655 가운데를 말해요

2020. 9. 11. 19:09·알고리즘/BOJ

www.acmicpc.net/problem/1655

 

1655번: 가운데를 말해요

첫째 줄에는 수빈이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 수빈이가 외치는 정수가 차례대로 주어진다. 정수는 -1

www.acmicpc.net

단계별로 풀기에서 힙을 공부하고 응용 겸 풀어본 문제이다.

처음에는 이거 벡터로 해야되는거 아닌가? 싶을 정도로 접근이 안돼서 다른 사람의 풀이를 참고했다.

 

최대 힙과 최소 힙을 조건에 맞게 나눠서 그때 그때 최대 힙의 top을 출력해주면 된다.

 

  •  최대힙의 크기는 최소 힙의 크기와 같거나 1만큼만 커야 한다.
  •  최대힙의 top은 최소 힙의 top보다 작아야 한다.

이 두 조건을 만족시키며 구현하면 된다.

 

#include <iostream>
#include <queue>
using namespace std;

priority_queue<int, vector<int>, greater<>> Min; //최소힙
priority_queue<int> Max;

//1. 최대힙의 크기와 최소힙의 크기는 같거나 1만큼만 커야함
//2. 최대힙의 top은 최소힙의 top보다 작아야함

int main() {
	ios::sync_with_stdio(false); cin.tie(0);

	int n, x;
	cin >> n;
	while (n--) {
		cin >> x;
		if (Max.size() > Min.size()) Min.push(x); 
		else Max.push(x);

		if (!Max.empty() && !Min.empty()) {
			if (Max.top() > Min.top()) {
				int Max_tmp = Max.top();
				int Min_tmp = Min.top();
				Max.pop(); Min.pop();
				Max.push(Min_tmp); Min.push(Max_tmp);
			}
		}
		cout << Max.top() << '\n';
	}
	return 0;
}

 

 

 

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

백준 11401 이항 계수 3  (0) 2020.09.13
백준 10816 숫자 카드 2  (0) 2020.09.11
백준 1167 트리의 지름  (0) 2020.09.10
백준 1967 트리의 지름  (0) 2020.09.10
백준 11725 트리의 부모 찾기  (0) 2020.09.10
'알고리즘/BOJ' 카테고리의 다른 글
  • 백준 11401 이항 계수 3
  • 백준 10816 숫자 카드 2
  • 백준 1167 트리의 지름
  • 백준 1967 트리의 지름
khyu2
khyu2
  • khyu2
    dev log
    khyu2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘
        • BOJ
        • Programmers
        • Algorithm
        • SWEA
      • 개발
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    BOJ
    SWEA
    분할 정복
    우선순위 큐
    코딩테스트 연습
    팰린드롬
    조합
    소수
    BFS
    GREEDY
    유니온 파인드
    프로그래머스
    알고리즘
    dfs
    완전 탐색
    피보나치 수
    dp
    크루스칼
    구현
    트리
    이분탐색
    완전탐색
    다익스트라
    시뮬레이션
    이분 탐색
    큐
    냅색
    피사노 주기
    MST
    행렬 제곱
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khyu2
백준 1655 가운데를 말해요
상단으로

티스토리툴바