# 문제 - 외벽 점검
# 2020 KAKAO BLIND RECRUITMENT

# 1. 문제
# 동그란 모양의 외벽이 총 n미터가 있음
# 외벽에는 손상될 수 있는 취약점이 있음
# 취약점이 손상되지 않았는지 점검을 할건데 이 때, 주기적으로 친구들을 보내서 점검을 할 것임
# 점검 시간은 1시간으로 할 것인데, 1시간 동안 이동할 수 있는 거리가 모두 제각각임

# -> 가장 최소 인원만 투입해서 취약 지점을 점검할 수 있는 방법은?

# 2. 세부조건
# 외벽의 길이는 n / 1 ~ 200
# 취약 지점을 담은 배열 - weak / 1 ~ 15 / 오름차순 정렬
# 각 친구들이 1시간 동안 이동할 수 있는 거리의 배열 - dist
# 시계 방향 또는 반시계 방향으로 한방향으로만 이동 가능
# 취약 지점을 전부 점검할 수 없을 때는 -1 return

# 3. 시뮬레이션
# 입출력 예시를 가지고 생각을 해보자

# 4. 아이디어
# 원형인 외벽을 1차원 배열로 생각하고 접근하면 어떨까?
# 이동길이가 긴 녀석부터 점검시키면 어떨까? (왜냐하면 이동길이가 긴 친구가 점검할 수 있는 취약점이 많을테니까 - 최소인원으로 수렴하지 않을까)
# 그럼 어떤식으로 점검을 해야하지?
# 취약 지점부터 시작하는 것이 최대로 취약지점의 개수를 만들 수 있는 방법인 것 같음.
# 길이를 하나씩 이동시키면서 모든 경우를 찾아봐야 겠다.

# 5. 아이디어는 잘 뽑은 것 같지만 구현을 하는 방법이 생각이 나지 않았습니다.
# -- 그래서 제가 검색을 하던 중, 저와 같은 생각을 한 분이 블로그에 정리한 내용을 보게 되었고
# -- '기존 외벽을 연장해서 생각하는 법' · '순열' 등의 부분을 아예 떠올리지 못했기 때문에 풀이를 나가지 못했던 것입니다.
# -- 경우를 전부 찾아봐야겠다라고 생각은 했으나 왜 더이상 진행을 하지 못한 것일까요?
# -- 출처: https://yabmoons.tistory.com/552

# 6. 포인트
# - 원형인데 어떻게 할 것인가 -> 직선으로 해결해야겠다고 생각 (O)
# - 어떤 친구를 어떤 순서로 선택할 것인가 -> 길이가 긴 녀석부터 돌려야겠다고 생각 (O)
# - 어느 위치에 투입할 것인가 -> 이 부분을 놓쳤네 (X) -> 아니구나 취약 지점부터 시작해야겠다고 생각했네? (O)
