practivceAlgorithm/백준 379

[백준][Python] 17472 다리만들기2

bfs로 대륙별 grouping한 후 행, 열 순회로 최소거리 측정하고 kruskal로 연결. 연결된 간선 n - 1개 미만이면 -1출력 import sys input = sys.stdin.readline from collections import deque from heapq import heappop, heappush def find(x): if parents[x] == x: return x parents[x] = find(parents[x]) return parents[x] def union(x, y): x = find(x) y = find(y) if x > y: x, y = y, x parents[y] = x def grouping_continent(x, y): q = deque() q.appen..

[백준][Python] 2667 단지번호붙이기 : union-find 풀이

튜플을 이용해 union-find로 그룹핑했습니다 import sys input = sys.stdin.readline from collections import defaultdict def find(a): if parents[a] == a: return a parents[a] = find(parents[a]) return parents[a] def union(a, b): a = find(a) b = find(b) if a > b: a, b = b, a parents[b] = a N = int(input()) matrix = [list(map(int, list(input().rstrip()))) for _ in range(N)] delta = ((0, 1), (1, 0), (-1, 0), (0, -1)) ..

[백준][Python] 1895 필터

중앙값 계속 체크해서 반환. 슬라이딩 윈도우처럼 돌리는건 불가능할까? 사실 세로로 삽입하면 한줄씩은 3개씩 빼고 넣는게 가능할지도? import sys input = sys.stdin.readline def check_mid(x, y): tmp = [] for i in range(x, x + 3): for j in range(y, y + 3): if tmp: if tmp[-1] = T: return True return False R, C = map(int, input().split()) filters = [list(map(int, input().split())) for __ in range(R)] T = int(input()) cnt = 0 for i in range(R - 2): for j in ra..

[백준][Python] 2474 세 용액

투포인터를 각 출발선마다 돌리는 로직입니다. 정렬후 앞에서 하나씩 고정값으로 픽스시켜두고 두가지 포인터로 합의 범위를 0으로 수렴시켜나가는 과정입니다. import sys input = sys.stdin.readline n = int(input()) liquid = sorted(list(map(int, input().split()))) close_zero = float('inf') selected = [0]*3 for start in range(n - 2): left, right = start + 1, n - 1 while left < right: sum_value = abs(liquid[start] + liquid[left] + liquid[right]) if sum_value < close_zero:..

[백준][Python] 1595 북쪽나라의 도로 : 함수 재활용 시 반환값에 주의

트리의 지름 문제. bfs 두번을 통해 최대 거리를 두번 산출해주면 된다. 조금 중요한게 graph배열을 1부터가 아니라 0부터 만들어 주어야 한다는점. (노드가 1개일때 내가 노드를 1로 설정해둬서.. 지금보니 그냥 target_node를 1로 설정해 주었다면 1부터 해도 될것같다) import sys input = sys.stdin.readline from collections import deque def bfs(start): q = deque() q.append((start, 0)) visited = [False for __ in range(10001)] visited[start] = True max_dist = 0 target_node = 0 while q: cur_node, cur_dist =..