[programmers] 외벽 점검 - 파이썬 (python)

zioo·2022년 6월 19일
0
post-custom-banner

solution

  • weak 리스트와 dist 리스트의 길이가 매우 작으므로 완전 탐색 을 이용한다.

  • 원형으로 나열된 데이터를 처리하는 경우에는 길이를 2배로 늘려서 일자 형태로 변경하는 것이 좋다.

  • answer 가 친구 수 보다 많으면 return - 1

  • 배열의 크기가 크지 않고 모든 경우의 수를 따져보아야 하는 경우 permutation 을 사용하면 편하다

code

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
post-custom-banner

0개의 댓글