Algorithms
-
[다익스트라 알고리즘] 미로만들기Algorithms/Shortest Path 2021. 8. 29. 16:55
기출: 백준 #2665 from heapq import heappush, heappop INF = int(1e9) dx = [1,-1,0,0] dy = [0,0,1,-1] n = int(input()) distance = [[INF for _ in range(n)] for __ in range(n)] distance[0][0] = 0 visited = [[False for _ in range(n)] for __ in range(n)] graph = list() for _ in range(n): graph.append(input()) queue = list() heappush(queue, (0,(0,0))) while queue: curVal, cur = heappop(queue) if distance[c..
-
[플로이드 워셜 알고리즘] 맥주 마시면서 걸어가기Algorithms/Shortest Path 2021. 8. 29. 14:49
기출 : 백준 #9205 from collections import deque INF = int(1e9) t = int(input()) def calcDist(st, en): dist = abs(st[0]-en[0]) + abs(st[1]-en[1]) if dist>1000: return INF return dist for _ in range(t): n = int(input()) node = [] graph = [[INF for _ in range(n+2)] for __ in range(n+2)] home = list(map(int,input().split())) node.append(home) for i in range(n): node.append(list(map(int,input().split()))..
-
[다익스트라 알고리즘] 케빈 베이컨의 6단계 법칙Algorithms/Shortest Path 2021. 8. 29. 11:11
기출 : 백준 #1389 INF = int(1e9) n, m = map(int,input().split()) graph = [[] for _ in range(n+1)] distance = [INF for _ in range(n+1)] answerArr = [0 for _ in range(n+1)] answerVal = INF answer = 0 for _ in range(m): a, b = map(int,input().split()) graph[a].append([1, b]) graph[b].append([1, a]) def dijkstra(start): distance[start] = 0 queue = [[0,start]] while queue: curVal, cur = queue.pop(0) if d..
-
[다익스트라 알고리즘] 알고스팟Algorithms/Shortest Path 2021. 8. 15. 12:19
기출 : 백준 #1261 from heapq import heappush, heappop INF = int(1e9) dx, dy = [1,-1,0,0], [0,0,1,-1] m, n = map(int,input().split()) board = list() for _ in range(n): board.append(list(input())) distance = [[INF for __ in range(m)] for _ in range(n)] distance[0][0] = 0 queue = list() heappush(queue, (0,[0,0])) while queue: curVal, cur = heappop(queue) curX, curY = cur # 이미 계산한 경우 if distance[curX][c..
-
[DP 알고리즘] LCSAlgorithms/Dynamic Programming 2021. 8. 15. 12:18
기출: 백준 #9251 stringA = ' ' + input() stringB = ' ' + input() m = len(stringA) n = len(stringB) LCS = [[0 for __ in range(n)] for _ in range(m)] for i in range(1, m): for j in range(1, n): if stringA[i] == stringB[j]: LCS[i][j] = LCS[i-1][j-1] + 1 else: LCS[i][j] = max(LCS[i-1][j], LCS[i][j-1]) print(LCS[m-1][n-1])
-
[BFS 알고리즘] 연구소Algorithms/Breadth First Search 2021. 8. 15. 10:24
기출 : 백준 #14502 from itertools import combinations from collections import deque from copy import deepcopy n,m = map(int,input().split()) board = list() empty = list() virus = list() dx, dy = [1,-1,0,0], [0,0,1,-1] for _ in range(n): board.append(list(map(int,input().split()))) for i in range(n): for j in range(m): if board[i][j] == 0: empty.append([i,j]) elif board[i][j] == 2: virus.append([i,j]..
-
[BFS 알고리즘] 토마토Algorithms/Breadth First Search 2021. 8. 14. 13:34
기출 : 백준 #7576 하나의 점에서 BFS를 시작하는 것이 아니라 여러 점에서 BFS를 진행해야 한다 추가적으로 파이썬 리스트의 pop(0) 함수는 O(n)의 시간이 걸리므로 Collections.deque를 대신 사용해야 한다 from collections import deque n,m = map(int,input().split()) dx, dy = [1,-1,0,0], [0,0,1,-1] board = list() for _ in range(m): board.append(list(map(int,input().split()))) done = deque(); yet = 0 empty = 0 for i in range(m): for j in range(n): if board[i][j] == 1: don..