Search
Duplicate

외벽 점검

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

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