[BOJ/Python]212号センサー


この問題では,入力したセンサを昇順に並べ,最左側のセンサと最右側のセンサとの距離を求める.各センサ間の距離を含むアレイをそれぞれ作成し,それを昇順に並べ,最左と右の距離でk−1個のセンサ間の距離アレイを前面から減算して解決した.99%のインデックスエラーが発生し、コードを解析したところ、kがn以上、すなわち、自宅の数がセンサの数以上である場合、受信可能領域の長さの和の最小値は0であり、この場合の例外処理が行われていないためであることが分かった.これに対して例外処理を行い,成功を収めた.
  • nと入力します.
  • kと入力します.
  • センサの位置を格納するアレイarrを宣言し、センサの位置を入力する.
  • arrを昇順に並べます.
  • arr[n−1]−arr[0]は変数gapに格納される.
  • arrの区間距離を格納する配列part gapを発表した.
  • kがn以上である場合、各集中局はセンサを担当するので、受信可能領域の和はゼロである.したがってgapは0に更新される.
  • kがnより小さい場合、
    ->n-1ループのiのfor文.
    -->part gapはarr[i-1]-arr[i]の結果を含む.
    ->part gapを降順に並べます.
    ->k-1ループのiのfor文.
    -->gapからpart gap[i]を減算します.
  • 出力
  • gap.
  • Code

    n=int(input())
    k=int(input())
    arr=list(map(int, input().split()))
    arr.sort()
    gap=arr[n-1]-arr[0]
    part_gap=[]
    if k>=n:
        gap=0
    else:
        for i in range(n-1):
            part_gap.append(arr[i+1]-arr[i])
        part_gap.sort(reverse=True)
        for i in range(k-1):
            gap-=part_gap[i]
    print(gap)