코테

import math# 이해법# 첫번쨰 build로 계속 타고 들어가서 끝에 도달# 이분법으로 범위를 쪼게서 들어왔음을 고려# 마지막에선 좌 우 하나씩만 범위를 가져올거기 때문에# 두번째 build로 들어가서 두번째 값을 넣어주곤 나옴# 두 build의 연산이 끝났기 때문에 부모 node에 합을 넣어줌# 예를들어 0~20 범위일때# 0~20 -> 0~10, 11~20# 0~10 -> 0~5, 6~10# 0~5 -> 0~2, 2~5# 0~2 -> 0~1, 2# 0~1 -> 0, 1# 0, 1 찍고 합처리# 2찍고 합처리# 2~5 시작# 2~5 -> 2~3, 3~4# 2~3 -> 2, 3# 2, 3 찍고 합처리# 3~4 -> 3, 4# 3, 4 찍고 합처리# 두 합을 더해줌# 위의 0~2, 2~5 마지막에 ..
import heapqdef prim(n, graph): visited = set() pq = [(0, 0)] mst_cost = 0 while pq: weight, node = heapq.heappop(pq) if node in visited: continue visited.add(node) mst_cost += weight for neighbor, w in graph[node]: if neighbor not in visited: heapq.heappush(pq, (w, neighbor)) return mst_costgraph = {0: [(1, 1..
String불변의 속성을 가진다.String끼리 덧셈 연산을 하면 garbage collector가 남은 String을 처리한다.따라서 변경이 잦은 문자열은 StringBuffer나 StringBuilder을 사용해야 한다.Constant Pool에 존재 StringBuffer동기화 키워드를 지원해서 멀티스레드 환경에서 안전하지만 성능은 StringBuilder보다 안좋다.스레드에 안전한 프로그램이 필요할 때나 개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우 사용하는 것이 좋다 StringBuilder동기화를 지원하지 않아서 멀티스레드 환경에는 적합하지 않다. 코테에 적합하다.스레드에 안전한지 여부가 전혀 관계 없는 프로그램을 개발할 때 사용하면 적합하다.
str_row = "".join(i).split("0")#0 0 1 1 1 형태#'' '' '111'로 변환
zip(list1, list2)# 1 2 3# "a" "b" "c"# 1, "a"# 2, "b"# 3, "c"#list로 감싸면 list 변환 가능
from collections import dequev, e = map(int, input().split())indegree = [0] * (v + 1)graph = [[] for i in range(v + 1)]for _ in range(e): a, b = map(int, input().split()) graph[a].append(b) indegree[b] += 1def topology_sort(): result = [] q = deque() for i in range(1, v + 1): if indegree[i] == 0: q.append(i) while q: now = q.popleft() result.a..