문제 설명 및 제한사항
아이디어 및 해결 방법
코드
from math import factorial, inf
import itertools
def rotate(weak, k, n):
weak = weak[k:] + [n+x for x in weak[:k]]
mn = min(weak)
return [x-mn for x in weak]
def all_permutations(dist):
x = []
for n in range(1, len(dist) + 1):
x += list(itertools.permutations(dist, n))
return x
def solution(n, weak, dist):
# 제한조건이 그리 어렵지 않아서 완전탐색으로도 풀릴 것 같다.
mn = inf
for k in range(len(weak)):
tmp = rotate(weak, k, n)
for perm in all_permutations(dist):
i, pos = 0, tmp[0]
for n_worker, d in enumerate(perm, 1):
while i < len(tmp) and tmp[i] <= pos + d:
i += 1
if i < len(tmp):
pos = tmp[i]
if i == len(tmp):
if n_worker < mn:
mn = n_worker
break
return -1 if mn == inf else mn
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges