practivceAlgorithm 570

[백준][Python] 2571 색종이3

최초풀이 : 브루트포스. 시작지점, 종료지점 정해놓고 안에 0있으면 연산 포기 개선풀이 : stack이용 열, 행순회하며 기록해둔 높이값을 기반으로 해 높이가 높은 직사각형부터 연산. 최초풀이 import sys input = sys.stdin.readline def find_rectangle(x,y): max_size = 100 for i in range(100): if x+i >100: break for j in range(100): if y + j > 100: break max_size = max(max_size,calculate_area(x,y,x+i,y+j)) return max_size def calculate_area(x,y,h,w): cnt = 0 for i in range(x,h+1): ..

[백준][Python] 2644 촌수계산

처음에 lca인가 봤더니 그냥 BFS. 이진트리라면 lca써야했을지도. import sys input = sys.stdin.readline from collections import deque def bfs(start,target): visited = {i: 0 for i in range(n+1)} visited[start] = 1 q = deque() q.append(start) while q: cur_node = q.popleft() if cur_node==target: return visited[cur_node] -1 for next_node in graph[cur_node]: if not visited[next_node]: visited[next_node] = visited[cur_node] + ..

[백준][Python] 1719 택배 : 플로이드워셜 경로

결국 플로이드 워셜은 어떤 경로를 통해 움직이는가? 갱신은 어떤식으로 가능한가? 결국 최초의 움직임은 직접 간선으로부터 나온다. import sys input = sys.stdin.readline n, m = map(int, input().split()) dists = [[float('inf') for _ in range(n)] for _ in range(n)] pre_node = [[0 for _ in range(n)] for _ in range(n)] for _ in range(m): a, b, c = map(int, input().split()) dists[a-1][b-1] = min(dists[a-1][b-1],c) dists[b-1][a-1] = min(dists[b-1][a-1],c) pre_..

[백준][Python] 1992 쿼드트리

똑같이 분할정복. 출력 방식만 다름 import sys input = sys.stdin.readline def check(n,s_x,s_y): pivot = matrix[s_x][s_y] for i in range(s_x,s_x+n): for j in range(s_y,s_y+n): if matrix[i][j] != pivot: return False return True def compress_video(n,s_x,s_y): pivot = n//2 if n==1: q_tree.append(str(matrix[s_x][s_y])) return if check(n,s_x,s_y): q_tree.append(str(matrix[s_x][s_y])) return q_tree.append('(') for i i..