문제풀이/백준(Boj) 문제풀이 188

[백준][자료구조/힙] 1766.문제집 (파이썬/Python)

import sys import heapq n,m = map(int,input().split()) B_list = [[] for _ in range(n+1)] check = [0 for _ in range(n+1)] heap = [] answer = [] for _ in range(m): a,b = map(int,input().split()) B_list[a].append(b) check[b] += 1 for i in range(1,n+1): if check[i] == 0: heapq.heappush(heap,i) while heap: now = heapq.heappop(heap) answer.append(now) for i in B_list[now]: check[i] -= 1 if check[i] ==..

[백준][DFS/DP] 1707. 이분 그래프 (파이썬/Python)

import sys input = sys.stdin.readline from collections import deque def bfs(start): visited[start] = 1 q = deque() q.append(start) while q: x = q.popleft() for i in graph[x]: if visited[i] == 0: visited[i] = -visited[x] q.append(i) else: if visited[i] == visited[x]: return False return True k = int(input()) for _ in range(k): v,e = map(int,input().split()) graph = [[] for _ in range(v+1)] visite..

[백준][Dijkstra/다익스트라] 1504번.특정한 최단 경로 (파이썬/Python)

import heapq import sys input = sys.stdin.readline INF = int(1e9) v, e = map(int, input().split()) graph = [[] for _ in range(v + 1)] for _ in range(e): x, y, cost = map(int, input().split()) graph[x].append((y, cost)) graph[y].append((x, cost)) def dijkstra(start): distance = [INF] * (v + 1) q = [] heapq.heappush(q, (0, start)) distance[start] = 0 while q: dist, now = heapq.heappop(q) if distan..

[백준][DFS] 1967. 트리의 지름 (파이썬/Python)

import sys sys.setrecursionlimit(10**9) input = sys.stdin.readline n=int(input()) graph=[[] for _ in range(n+1)] for _ in range(n-1): p,c,cost=map(int,input().split()) graph[p].append([c,cost]) graph[c].append([p,cost]) result1=[0 for _ in range(n+1)] def DFS(start,graph,result): for e,d in graph[start]: if result[e]==0: result[e]=result[start]+d DFS(e,graph,result) DFS(1,graph,result1) result1[..

[백준][자료구조/힙] 1655.가운데를 말해요 (파이썬/Python)

import heapq import sys input = sys.stdin.readline n = int(input()) h = [] for _ in range(n): x = int(input()) if x != 0: heapq.heappush(h,(abs(x),x)) else: try: print(heapq.heappop(h)[1]) except: print(0) # heap에 들어간 heap[1]값을 빼야 절대값이 씌워진 수가 아닌 본래 우리가 넣었던 수를 pop할 수 있기 때문에 h[1]을 빼내주는 것이다.

[백준][자료구조/힙] 1655.가운데를 말해요 (파이썬/Python)

import sys import heapq input = sys.stdin.readline n=int(input()) leftHeap=[] rightHeap=[] answer=[] for i in range(n): num=int(input()) if len(leftHeap)==len(rightHeap): heapq.heappush(leftHeap, (-num, num)) else: heapq.heappush(rightHeap, (num, num)) if rightHeap and leftHeap[0][1] > rightHeap[0][0]: min=heapq.heappop(rightHeap)[0] max=heapq.heappop(leftHeap)[1] heapq.heappush(leftHeap, (-min,..

[백준][자료구조/힙] 1927.최소 힙 (파이썬/Python)

import heapq import sys input = sys.stdin.readline n = int(input()) heap = [] for _ in range(n): x = int(input()) if x != 0: heapq.heappush(heap,x) else: try: print(heapq.heappop(heap)) except: print(0) [자료구조와 함께 배우는 알고리즘][정렬 알고리즘] - 힙 정렬(Heap Sort) 1. 힙 정렬 알아보기 힙 정렬은 힙의 특성을 이용해 정렬하는 알고리즘이다. 힙은 '부모의 값이 자식의 값보다 항상 크다'는 조건을 만족하는 완전 이진 트리이다. 이때 부모의 값이 자식의 값보 yeomylaoo.tistory.com 힙에 대해서 정리해놓은 것이기 때..