์ฌ๋ฌ๊ฐ์ ์์๋ฅผ ํ๋ณํด์ผ ํ ๋์๋ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ฌ์ฉํ๋ค.
- 2๋ถํฐ N๊น์ง์ ์์๋ฅผ ๊ตฌํ๋ค๊ณ ํ์ ๋ 2๋ถํฐ N๊น์ง ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ ์๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋, ์ง์์ง ์๋ ํจ์คํ๋ค.
- ์ง์์ง์ง ์์ ์๊ฐ ์์๋ค.
import statistics
arr = list()
mode = statistics.mode(arr)๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํด์ผ ํ ๋์๋ ์ฌ๊ทํธ์ถ์ ์ฌ์ฉํ๋ค. (dfs)
import copy
copy.deepcopy()board = list(map(lambda x: ord(x)-65, input().rstrip()))ABCDE -> [0, 1, 2, 3, 4]
N, M = map(int, input().split())
graph = [list(map(int, list(input()))) for _ in range(N)]l = [4,3,5]
q = heapq.heapify(l)์ต๋ ์ฌ๊ท ๊น์ด ๊ฐ์ ๋ก ๋๋ฆฌ๊ธฐ
import sys
sys.setrecursionlimit(100000)์ง๊ณํจ์(
group by)๋ฅผ ์ด์ฉํ ์กฐ๊ฑด๋น๊ตwhere๋์having์ฌ์ฉ
visited = [False] * n
picked = []
def perm():
global n,r
if len(picked) == r:
print(picked)
return
for i in range(len):
if not visited[i]:
picked.append(arr[i]) # ๋ณํ
visited[i] = True
perm() # ์ฌ๊ทํธ์ถ
visited[i] = False
picked.pop() # ๋ณต์# ์กฐํฉ์ ๊ฒฝ์ฐ visited๊ฐ ํ์์์
picked = []
def comb(left):
global n,r
if len(picked) == r:
print(picked)
return
for i in range(left, n): # left ~ n๊น์ง๋ง ํ์
picked.append(arr[i]) # ๋ณํ
comb(i+1) # ์ฌ๊ทํธ์ถ (๋ง์ง๋ง์ ๋ฃ์๋ index๊ฐ left๊ฐ ๋๋ค.)
picked.pop() # ๋ณต์import heapq
def dijkstra(start):
distance = [1e9]*(N+1)
distance[start] = 0
h = [(0, start)]
while h:
dist, now = heapq.heappop(h)
if dist==distance[now]:
for target,d in graph[now]:
if dist+d < distance[target]:
distance[target] = dist+d
heapq.heappush(h, (dist+d, target))
return distancedef find(x):
if x==parent[x]:
return x
parent[x] = find(parent[x])
return parent[x]
def union(x,y):
x = find(x)
y = find(y)
if x != y:
parent[y] = xdef eratosthenes_sieve(N):
prime = [True] * (N + 1)
for i in range(2, int(N ** .5) + 1):
if prime[i]:
for j in range(i + i, N + 1, i):
prime[j] = False
return [i for i in range(2, N + 1) if prime[i]]from collections import deque
conditions = [[]]
degree = []
result = []
q = deque()
for i in range(N):
if degree[i]==0: deque.append(q, i)
while q:
a = deque.popleft(q)
result.append(a)
for b in conditions[a]:
degree[b] -= 1
if degree[b]==0: deque.append(q, b)arr = [] # source array
tree = [0]*(4*N)
# initialize the tree
def init(start, end, node):
if start==end:
tree[node] = arr[start]
return tree[node]
mid = (start+end)//2
tree[node] = init(start,mid,node*2) + init(mid+1,end,node*2+1)
return tree[node]
# sum of left~right
def t_sum(start, end, node):
global left, right
if start>right or end<left: return 0
if start>=left and end<=right: return tree[node]
mid = (start+end)//2
return t_sum(start,mid,node*2) + t_sum(mid+1,end,node*2+1)
# change value
def update(start, end, node):
global index, diff
if start<=index<=end:
tree[node] += diff
if start!=end:
mid = (start+end)//2
update(start,mid,node*2)
update(mid+1,end,node*2+1)
# main
init(0, N-1, 1)
left, right = a, b
print(t_sum(0, N-1, 1))
index, diff = i, x
update(0, N-1, 1)index๊ฐ 1๋ถํฐ ์์์
arr=[0]+[], init(1,N,1)
def bin_search(left, right):
global target
while l<=r:
mid = (left+right)//2
if target<arr[mid]:
right = mid-1
elif target>arr[mid]:
left = mid+1
else: return mid
return -1def upper_bound(left, right):
global target
while l<=r:
mid = (left+right)//2
if target<arr[mid]:
right = mid-1
elif target>=arr[mid]:
left = mid+1
return right