[Programmers/프로그래머스] 2020 KAKAO BLIND RECRUITMENT [코딩테스트]
- [Lv. 2] 문자열 압축
- [Lv. 2] 괄호 변환
- [Lv. 3] 자물쇠와 열쇠
- [Lv. 4] 가사 검색
- [Lv. 3] 기둥과 보 설치
- [Lv. 3] 외벽 점검
- [Lv. 3] 블록 이동하기
from itertools import permutations
def solution(n, weak, dist):
length = len(weak) # 확장 전 크기
weak += [w + n for w in weak] # 원형 큐 구현을 위한 확장
answer = float('inf')
for idx, start in enumerate(weak[:length]): # 각각의 취약점을 시작점으로
for candidate in list(permutations(dist)): # 조합가능한 친구의 투입순서에 대해
count = 1 # 투입된 친구의 수 초기화
position = start # 현재까지 점검한 위치 초기화
for friend in candidate: # 현재 조합대로 한 명씩 투입하며
position += friend # 현재까지 점검한 위치가
if position < weak[idx + length - 1]: # 점검해야 할 마지막 취약점보다 작으면
count += 1 # 친구 추가투입
# 현재위치 다음 취약점을 시작점(현재위치)으로 갱신하여 계속해서 점검
position = [w for w in weak[idx + 1:idx + length] if position < w][0]
else: # 점검해야 할 마지막 취약점보다 크면
answer = min(answer, count) # 투입된 최소 친구수 갱신
break # 현재조합 확인종료
return -1 if len(dist) < answer else answer # 전부 점검할 수 없는 경우