[SWEA] 5208. [Python S/Wトラブルシューティング実施]5日間-電動バス2[D 3]


📚 質問する


https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDYSqAAbw5UW6&subjectId=AWUYGf7K180DFAVT#

📖 に答える


最初に思ったのは、充電池で充電すれば、あとどのくらい行けるか知っていたことです.しかし、電池を交換したようで、以前の電気量は初期化してから新しい電池を持って出発した.
そのため、現在の位置から行ける位置から、コールが戻ってきて、それぞれ位置から充電して出発します.
枝を切ることで繰り返し回数を減らす.最後まで継続すると交換回数が初期化され、現在求めている交換回数がこれまで求めた最小交換回数以上であれば終了し、次の再帰関数を探索する.

📒 コード#コード#

def recur(cur, change):
    global min_change
    if min_change <= change:        # 가지치기, 교환 횟수가 더 많아지면 X
        return
    if cur >= n:
        min_change = min(min_change, change)
        return
    for i in range(1, arr[cur] + 1):    # 움직일 수 있는 정류장
        recur(cur + i, change + 1)


t = int(input())
for tc in range(1, t + 1):
    arr = list(map(int, input().split()))
    n = arr.pop(0) - 1
    min_change = n
    recur(0, -1)    # 첫 정류장에서 연료를 넣고 출발하는 경우를 빼준다.
    print(f'#{tc} {min_change}')

🔍 結果