728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/60062?language=python3#
최종 코드
from itertools import permutations
def solution(n, weak, dist):
answer = -1
permu = list(set(permutations(dist, len(dist))))
for i in range(len(weak)):
for per in permu:
visit = [0] * len(weak)
check = 0
friend = 0
loc = i
for f in per:
friend += 1
check += 1
visit[loc] = 1
new_loc = weak[loc] + f
if new_loc >= n:
for j in range(len(weak)):
if not visit[j]:
if weak[loc] < weak[j] < n or 0 <= weak[j] <= new_loc - n:
visit[j] = 1
check += 1
if new_loc - n == weak[i] or check == len(weak): break
else:
for j in range(len(weak)):
if not visit[j]:
if weak[loc] < weak[j] <= new_loc:
visit[j] = 1
check += 1
if new_loc == weak[i] or check == len(weak): break
loc += 1
if loc == len(weak): loc = 0
while visit[loc]:
loc += 1
if loc == len(weak): loc = 0
if check == len(weak):
if answer == -1 or answer > friend: answer = friend
return answer
풀이 과정
from itertools import permutations
def solution(n, weak, dist):
answer = -1
#외벽 점검을 갈 친구들 순서 구하기
permu = list(set(permutations(dist, len(dist))))
#weak[i]를 시작점으로 외벽 점검 시작
for i in range(len(weak)):
#모든 경우의 수에 대하여 순서에 맞게 친구들이 외벽을 점검한다
for per in permu:
#visit[i] = i번째 외벽 점검 완료이면 True, 아니면 False
visit = [0] * len(weak)
#점검한 외벽 수
check = 0
#외벽 점검을 나간 친구 수
friend = 0
#현재 점검해야 하는 외벽의 인덱스
loc = i
#한 명씩 순서대로 외벽을 점검한다
for f in per:
#외벽 점검을 나간 친구 수 증가
friend += 1
#loc번 째 외벽을 점검한다
check += 1
visit[loc] = 1
#현재 점검 중인 친구가 점검을 끝낸 지점
new_loc = weak[loc] + f
#new_loc이 n보다 큰 경우,
if new_loc >= n:
#현재 친구가 점검한 외벽을 카운팅 한다
for j in range(len(weak)):
#현재 친구가 이동한 거리 내에 점검하지 않은 외벽인 경우, 점검 처리한다
if not visit[j]:
if weak[loc] < weak[j] < n or 0 <= weak[j] <= new_loc - n:
visit[j] = 1
check += 1
#외벽 둘레를 모두 점검한 경우이거나, 모든 점검할 외벽을 다 점검한 경우, 반복문을 벗어난다
if new_loc - n == weak[i] or check == len(weak): break
#new_loc이 n보다 작은 경우,
else:
#현재 친구가 점검한 외벽을 카운팅 한다
for j in range(len(weak)):
#현재 친구가 이동한 거리 내에 점검하지 않은 외벽인 경우, 점검 처리한다
if not visit[j]:
if weak[loc] < weak[j] <= new_loc:
visit[j] = 1
check += 1
#외벽 둘레를 모두 점검한 경우이거나, 모든 점검할 외벽을 다 점검한 경우, 반복문을 벗어난다
if new_loc == weak[i] or check == len(weak): break
#다음 친구가 점검을 시작해야하는 외벽 인덱스를 구한다
loc += 1
if loc == len(weak): loc = 0
while visit[loc]:
loc += 1
if loc == len(weak): loc = 0
#모든 점검해야할 외벽을 다 점검한 경우, answer을 갱신한다
if check == len(weak):
if answer == -1 or answer > friend: answer = friend
return answer
참고
- 1. 문자열 압축 ->2021.09.05 - [코테 노트/프로그래머스] - Level 2 문자열 압축 <2020 KAKAO BLIND RECRUITMENT > Python 3
- 2. 괄호 변환 ->2021.09.05 - [코테 노트/프로그래머스] - Level 2 괄호 변환 <2020 KAKAO BLIND RECRUITMENT> Python 3
- 3. 자물쇠와 열쇠 ->2021.09.05 - [코테 노트/프로그래머스] - Level 3 자물쇠와 열쇠 <2020 KAKAO BLIND RECRUITMENT> Python 3
- 5. 기둥과 보 설치 -> 2022.04.02 - [코테 노트/프로그래머스] - Level 3 기둥과 보 설치 <2020 KAKAO BLIND RECRUITMENT> Python 3
- 7. 블록 이동하기 ->
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 3 카드 짝 맞추기 <2021 KAKAO BLIND RECRUITMENT> Python3 (0) | 2022.05.06 |
---|---|
Level 3 광고 삽입 <2021 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.05.05 |
Level 3 기둥과 보 설치 <2020 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.04.02 |
Level 3 매칭 점수 <2019 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.04.01 |
Level 2 [3차] n진수 게임 <2018 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.03.30 |