[Programmers/프로그래머스] 2020 KAKAO BLIND RECRUITMENT 외벽 점검 - Python/파이썬 [해설/풀이]

SihoonCho·2022년 9월 30일
0
post-thumbnail
[Programmers/프로그래머스] 2020 KAKAO BLIND RECRUITMENT [코딩테스트]
  1. [Lv. 2] 문자열 압축
  2. [Lv. 2] 괄호 변환
  3. [Lv. 3] 자물쇠와 열쇠
  4. [Lv. 4] 가사 검색
  5. [Lv. 3] 기둥과 보 설치
  6. [Lv. 3] 외벽 점검
  7. [Lv. 3] 블록 이동하기

📌 문제


📝 제한사항


💻 입출력 예


📖 입출력 예에 대한 설명


📌 풀이


from itertools import permutations

def solution(n, weak, dist):
    length = len(weak)              # 확장 전 크기
    weak += [w + n for w in weak]   # 원형 큐 구현을 위한 확장

    answer = float('inf')
    for idx, start in enumerate(weak[:length]):         # 각각의 취약점을 시작점으로
        for candidate in list(permutations(dist)):      # 조합가능한 친구의 투입순서에 대해
            count = 1                                       # 투입된 친구의 수 초기화
            position = start                                # 현재까지 점검한 위치 초기화
            for friend in candidate:                        # 현재 조합대로 한 명씩 투입하며
                position += friend                              # 현재까지 점검한 위치가
                if position < weak[idx + length - 1]:           # 점검해야 할 마지막 취약점보다 작으면
                    count += 1                                  # 친구 추가투입
                    # 현재위치 다음 취약점을 시작점(현재위치)으로 갱신하여 계속해서 점검
                    position = [w for w in weak[idx + 1:idx + length] if position < w][0]
                else:                                           # 점검해야 할 마지막 취약점보다 크면
                    answer = min(answer, count)                 # 투입된 최소 친구수 갱신
                    break                                       # 현재조합 확인종료

    return -1 if len(dist) < answer else answer         # 전부 점검할 수 없는 경우
profile
개발을 즐길 줄 아는 백엔드 개발자

0개의 댓글