💡Problem Solving/Programmers

[프로그래머스] 외벽 점검 (Python)

gom20 2022. 12. 20. 09:37

문제

https://school.programmers.co.kr/learn/courses/30/lessons/60062?language=python3 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 & 소스코드

from itertools import permutations
def solution(n, weak, dist):
    answer = len(dist) + 1
    # 취약점 길이를 두배로 늘리기
    weak_len = len(weak)
    for i in range(weak_len):
        weak.append(weak[i] + n)
    
    # 친구의 순열을 뽑는다.
    friends_list = list(permutations(dist, len(dist))) 
    
    # 취약점 시작점 모든 경우의 수
    for start in range(weak_len):
        # 친구 순열 모든 경우의 수
        for friends in friends_list:
            # start 취약점에 친구 한명 놓기 
            count = 1
            position = weak[start] + friends[count-1]
            
            for index in range(start, start + weak_len):
                # 현재 친구 포지션이 모든 취약점을 다 커버할 수 있는지 체크
                if position < weak[index]:
                    # 다 커버가 안된다면
                    count += 1
                    if count > len(dist):
                        break
                    # 커버 안되는 취약점에 다른 친구 놓기
                    position = weak[index] + friends[count-1]
            
            answer = min(answer, count)
    if answer > len(dist):
        return -1

    return answer