[アルゴリズム]外壁のチェック
11531 ワード
[問題]外壁のチェック
https://programmers.co.kr/learn/courses/30/lessons/60062
トラブルシューティングのヒント完全探索問題は,ランダムにすべての友人をリストしたすべてのソート配列を用いて,友人のすべての状況をリストした個数を求める. 題は脆弱点が「円形」であることを示している.円形で並べられたデータは、長さを2倍に増やし、円形を1文字にすることができます. 各友人のすべての状況をリストする数は、配列によって求められる. 開始点はすべての脆弱点である可能性があるため、クエリ回数が最も高いのは脆弱点の数です. 脆弱な場所からリストされた友人(ex(3,5,7))の移動数が増加した位置(友人がチェックできる最後の位置).たとえば、脆弱点が1の場合、最初の友人の位置は4です. 次の友人の位置が4であれば、4を超える弱点に達すると友人に投入されます. 位のプロセスを繰り返した後、投入した友人を答えに保存します. にリストされている友人(3,5,7)の開始の弱点を増やし、以上の過程を繰り返し、投入された友人を確認し続けます. が最も少ない投入された友人が確定した場合、以下に示す友人リストを変更し、上記の手順(ex)3,7,5) を繰り返す.の答えが質問に投入された友人を上回った場合、-1に戻ります.
https://programmers.co.kr/learn/courses/4008/lessons/12836
https://programmers.co.kr/learn/courses/30/lessons/60062
トラブルシューティングのヒント
weak = [1, 3, 4, 9, 10]
length = len(weak)
for i in range(length):
weak.append(weak[i] + n)
result
weak = [1, 3, 4, 9, 10, 13, 15, 16, 21, 22]
for friends in list(permutations(dist, len(dist))):
print(friends)
result
(3, 5, 7)
(3, 7, 5)
(5, 3, 7)
(5, 7, 3)
(7, 3, 5)
(7, 5, 3)
from itertools import permutations
n = 12
weak = [1, 3, 4, 9, 10]
dist = [3, 5, 7]
def solution(n, weak, dist):
length = len(weak)
for i in range(length):
weak.append(weak[i] + n)
# 투입할 친구 수 초기화
answer = len(dist) + 1
# 0부터 length - 1 까지의 위치(취약지점)를 각각 시작점으로 설정
for start in range(length):
for friends in list(permutations(dist, len(dist))):
# 투입할 친구의 수
count = 1
position = weak[start] + friends[count - 1]
# 시작지점부터 모든 취약지점을 확인
for index in range(start, start + length):
# 점검할 수 있는 위치를 벗어나는 경우
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
solution(n, weak, dist)
注意:[シーケンスと組合せ-組合せ、配列]https://programmers.co.kr/learn/courses/4008/lessons/12836
Reference
この問題について([アルゴリズム]外壁のチェック), 我々は、より多くの情報をここで見つけました https://velog.io/@yj-leee/알고리즘-외벽-점검テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol