비트마스킹

yjkim·6일 전
0
from collections import deque
n = int(input())
graph=[]
for i in range(n):
    graph.append(list(map(int , list(input()))))

q = deque()

visited_mask = 1

visited_dict={}
visited_dict[1]=1
q.append([0,visited_mask,1,0])
answer= 0

while q:
    cur = q.pop()
    seller = cur[0]
    mask = cur[1]
    count = cur[2]
    amount = cur[3]
    answer = max(answer,count)
    for i in range(n):
        if graph[seller][i]>=amount and mask & (1<<i)==0:
            new_mask = mask | (1<<i)
            q.append([i,new_mask,count+1,graph[seller][i]])

print(answer)

방문 상태를 저장 할 경우 배열로 선언하는 것보다 비트마스킹 형태의 정수로 저장하면 공간복잡도 측면에서 효율적으로 코드 작성 가능

  • 추가
    파이썬에서 딕셔너리의 특정 키 존재 유무 파악할 때 그냥 in 연산자 적어주면 된다. 시간복잡도 o(1)
profile
We may throw the dice, but the Lord determines how they fall

0개의 댓글