Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 코딩테스트
- 자바
- Python
- Codeforces Round #802 (Div. 2)
- pypy3
- Python 3
- Java11
- baekjoon
- programmers
- SQLD / SQLP
- 백준
- 기초100제
- level1
- 응용
- SELECT 절
- 공공데이터
- Codeup
- java
- 파이썬
- 기본
- 단계별로 풀어보기
- GROUP BY 절
- HAVING 절
- 헤드퍼스트 디자인패턴
- 개념
- 기초
- JAVA 11
- 명품 자바 프로그래밍
- 이론
- BOJ
Archives
- Today
- Total
Development Project
[ Baekjoon - 10/21 ] - 1927번: 최소 힙 본문
1927번: 최소 힙
첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0
www.acmicpc.net
소요시간 : 자바 파이썬 둘다 코딩하는 시간 포함 15분정도. 행복한 문제~
이번 문제는 솔브닥 클래스를 올리고싶어서 풀게된 문제로, 최소힙을 구현할 수 있는지에 관한 문제이다!
우선 힙을 어떻게 구현해야하는지 살펴보자!
- 자바의 경우
- PriorityQueue를 이용해 최소힙과 최대힙 둘다 구현 가능하다
만약 사용자 정의 Class를 큐로 쓰고싶다면, Comparable이나 Comparator를 이용해 우선순위를 설정해야한다. -
import java.util.*; // 최소힙 PriorityQueue<Integer> minHeap = new PriorityQueue<>(); // 최대힙 PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
- PriorityQueue를 이용해 최소힙과 최대힙 둘다 구현 가능하다
- 파이썬의 경우
- 최소힙, 최대힙 둘다 heapq 라이브러리를 이용해 구현하되, 최소힙이 default이므로 최대힙을 구현하기 위해서는 마이너스를 붙인다.
-
import heapq # 최소힙 minHeap = [] heapq.heappush(heap, n) # 최대힙 minHeap = [] heapq.heappush(heap, (-n, n))
이를 구현할 수 있으면 위 문제는 매우 간단하다.
- 풀이 코드
- Java 11
-
import java.util.*; import java.io.*; public class Main{ static int N,x; public static void main(String[] args) throws IOException { //System.setIn(new FileInputStream("src/input.txt")); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); N = Integer.parseInt(br.readLine()); PriorityQueue<Integer> pq = new PriorityQueue<>(); while(N-->0){ x = Integer.parseInt(br.readLine()); if(x==0){ if(pq.isEmpty()){ System.out.println(0); }else{ System.out.println(pq.remove()); } }else{ pq.add(x); } } } }
-
- Python 3
-
import sys import heapq input = sys.stdin.readline N = int(input()) pq = [] for _ in range(N): x = int(input()) if x==0: if len(pq)==0: print(0) else: print(heapq.heappop(pq)) else: heapq.heappush(pq, x)
-
- Java 11
- 결과
'CodingTest > Baekjoon' 카테고리의 다른 글
[ Baekjoon - 10/23 ] - 1103번: 게임 (0) | 2022.10.23 |
---|---|
[ Baekjoon - 10/22 ] - 6087번: 레이저 통신 (0) | 2022.10.22 |
[ Baekjoon - 10/20 ] - 1581번: 락스타 락동호 (0) | 2022.10.21 |
[ Baekjoon - 10/19 ] - 1644번: 소수의 연속합 (0) | 2022.10.20 |
[ Baekjoon - 10/18 ] - 19238번: 스타트 택시 (0) | 2022.10.20 |
Comments