問題文のアリスは彼女のクラスの子供たちにいくつかのキャンディーを与えたいHackerRankキャンディーズ分布
。すべての子供たちは一列に並んでいて(その位置は固定されています)、クラスのそれぞれのパフォーマンスに応じて、それぞれの評価点があります。アリスは各子供に少なくとも1つのキャンディーを与えたいと思っています。 2人の子供がお互いに隣に座っていると、評価の高い子供はもっとキャンディーを食べる必要があります。アリスはお金を節約したいので、子供たちに与えられるキャンディの総数を最小限に抑える必要があります。
アリスが購入しなければならないキャンディの最小数を含む1行を出力します。
サンプル入力
3 (no of students)
1 (individual scores)
2
2
サンプル出力
4
私の解決策:
arr = []
for i in range(int(input())):
arr.append(int(input()))
# candy left to right, candy right to left, and candy array
candy_lr = [1]*(len(arr))
candy_rl = [1]*(len(arr))
candy = []
# traverses from left to right and assigns candy to students
for i in range(1,len(arr)):
if arr[i]>arr[i-1]:
candy_lr[i] = candy_lr[i-1]+1
# traverses from right to left and assigns candy to students
for i in range(len(arr)-2,0,-1):
if arr[i]>arr[i+1]:
candy_rl[i] = candy_rl[i+1]+1
#calculates the total candy needed
for i in range(0,len(arr)):
candy.append(max(candy_lr[i],candy_rl[i]))
print(sum(candy))
ただし、このソリューションでは、11/15
のテストケースのみが渡されます。ここにはサンプルinputがあります。上記の入力の場合、出力は33556
ですが、私の出力は33555
であり、4つのテストケースがすべて失敗した場合、私の出力は期待される出力と1
で異なります。私は15要素とその正常な作業のためにペンと紙でそれを試しました。私は行方不明のコーナーケースはありますか?