001 Yokan Partyができない

こちらの問題をやっているのですが中々できない。解説等も見ながら理解に努めてはいるんですが、「なんでそんなことやるの?」と思ってしまいどうも理解できない。
やはり賢い人たちの思考法に辿り着くのは難しいですね。

一応僕の書いたコードを紹介させてもらいます(間違っている奴なので絶対に参考にしないでください)


N, L = map(int, input().split())
K = int(input())
AList = list(map(int, input().split()))

kiremeList= []
yokan_average= L//(K+1)
criterion= yokan_average
for i in range(1, N-1):
 if abs(criterion-AList[i-1]) > abs(criterion-AList[i]) and abs(criterion-AList[i+1]) > abs(criterion-AList[i]):
   kiremeList.append(AList[i])
   criterion+= yokan_average

kiremeList.append(L)
resultList= []
resultList.append(kiremeList[0])
for i in range(len(kiremeList)-1):
 resultList.append(kiremeList[i+1]-kiremeList[i])
print(min(resultList))

変数が多くてスマヌ

ぼくがこのコードでやろうとしたことを説明させてもらいます。

1.全体のようかんを切れ目+1で割って、理想の平均値をまず求める
2.平均値から基準を求める
3.AListに格納しているあるインデックスの切れ目の長さと基準を引き算する 
 (これをあるインデックスの前後のインデックスでも行い、その値を比較する)
4.あるインデックスの値が前後のインデックスと比較して、最も基準値に近かった場合にkiremeListにその値を格納する
5.kiremeListに格納された値を前後を引き算して、ようかん一個ずつの長さを 計算して、resultListに格納する
6.最後にresultListに格納された値の最小値を出力する


といった手順でやっておりますが、自分ではこの方法で完璧だなどと高を括っていましたが、見事に不正解を叩き出して玉砕しました。
テストケースでは正解してたはずなんですけどねw

もし分かる方がいれば、僕のコードの欠点などをコメントで教えてもらえるとありがたいです。辛口コメントでも嬉しみです。

ということでもう一度解説等を見て勉強したいと思うので、本日はこのくらいで。


  

この記事が気に入ったらサポートをしてみませんか?