💻 링크
https://school.programmers.co.kr/learn/courses/30/lessons/60062

📖 문제 해결
주어진 데이터 개수가 적기 때문에 완전 탐색으로 접근할 수 있는 문제입니다. itertoolspermutations함수를 이용하여 점검하는 친구들의 순서의 모든 경우의 수를 계산하고, 원형인 레스토랑의 형태를 선형으로 고려하기 위해 적절하게 변형을 하여 문제를 해결하였습니다.

from itertools import permutations

def solution(n,weak,dist):

    length = len(weak)

    # 원형으로 되어 있는 것을 선형으로 변형
    for i in range(len(weak)):
        weak.append(weak[i] + n)

    # 투입할 친구의 최솟값을 찾아야 하므로 len(dist) + 1(전체 친구 수 + 1)로 초기화
    answer = len(dist) + 1

    # 모든 취약 지점들을 시작점으로 고려해보기
    for start in range(length):

        # permutations 함수로 경우의 수를 모두 계산하고
        # 경우마다 친구들을 순서대로 투입
        for friends in list(permutations(dist, len(dist))):
            count = 1

            # 해당 친구가 start 취약 지점부터 1시간 움직여 도착한 지점을 position에 저장
            position = weak[start] + friends[count-1]

            # start 취약 지점부터 모든 취약 지점을 확인
            for index in range(start, start + length):

                # 해당 친구가 weak[index]를 지나지는 못했을 경우
                if position < weak[index]:
                    count += 1

                    # 만약 모든 친구들이 투입되었음에도 모든 취약 지점을 점검하지 못하였다면
                    if count > len(dist):
                        break

                    # 다음 친구가 weak[index]를 시작으로 취약 지점을 점검하도록 함
                    position = weak[index] + friends[count-1]

            # 최솟값 계산
            answer = min(answer,count)

    # 만약 모든 취약 지점을 점검하지 못하였다면
    if answer > len(dist):
        return -1

    return answer
profile
AI를 공부하고 있는 학생입니다:)

0개의 댓글