weak 리스트와 dist 리스트의 길이가 매우 작으므로 완전 탐색
을 이용한다.
원형으로 나열된 데이터를 처리하는 경우에는 길이를 2배로 늘려서 일자 형태로 변경하는 것이 좋다.
answer 가 친구 수 보다 많으면 return - 1
배열의 크기가 크지 않고 모든 경우의 수를 따져보아야 하는 경우 permutation
을 사용하면 편하다
from itertools import permutations
def solution(n, weak, dist):
# 친구의 최솟값
answer = len(dist)+1
length = len(weak)
# 원형이기 때문에 2배 배열로 변경
for i in range(len(weak)):
weak.append(weak[i]+n)
# weak, dist 크기가 매우 작으므로 완전 탐색
# 시작점
for start in range(length):
for friends in list(permutations(dist,len(dist))):
count = 1 # 투입할 친구 수
# 현재 친구가 점검 가능한 위치 구하기
position = weak[start]+friends[count-1]
# 시작점 부터 모든 취약지점 확인
for i in range(start, start+length):
if position < weak[i] :
count += 1
if count > len(dist):
break
position = weak[i] + friends[count-1]
answer = min(answer,count)
if answer > len(dist):
return -1
return answer