###教えて頂きたいこと
試行錯誤したのですが、下記3つのエラーの1つを解決すると他の1つが出てしまいます。
このコードのエラーを解決する答えでなくても構わないので、このような二次元リストに対するループや条件分岐を組み立てていく際に意識すべき点や考え方を教えて頂けませんでしょうか。
前提・実現したいこと
二次元リストL内の各リストについて、[0]が同じであるリストの[2]を合計します。それぞれの合計を整数Mで割った値+1を合計して出力したいです。
【条件】
・数字は全て整数
・1 <= M <= 100
・L = [[x_0, y_0, c_0], [x_1, y_1, c_1], ・・・・・,[x_i, y_i, c_i]]
0 ≦ x_i ≦ 23, 0 ≦ y_i ≦ 59, 0 ≦ c_i ≦ 100
以下は例です。
M = 50
L = [[3, 20, 70], [3, 40, 170], [3, 59, 90], [4, 5, 55], [4, 25, 40]]
・70 + 170 + 90 = 330 330 // 50 + 1 = 7
・55 + 40 = 95 95 // 50 + 1 = 2
期待する出力 9 (= 7 + 2)
発生している問題・エラーメッセージ
IndexError: list index out of range
ランタイムエラー
期待した回数ループができず、誤った出力結果になる
該当のソースコード
リスト外のエラーの例
python
1M = int(input()) 2N = int(input()) 3 4L = [] 5for n in range(N): 6 L.append(input().split(" ")) 7 8i = 0 9C = 0 10c = int(L[i][2]) 11while i < N: 12 if i + 1 == N: 13 if L[i][0] == L[i - 1][0]: 14 break 15 else: 16 if c % M != 0: 17 C += c // M + 1 18 else: 19 C += c // M 20 21 while i + 1 < N: 22 if L[i][0] == L[i + 1][0]: 23 while L[i][0] == L[i + 1][0]: # ここでリスト外のエラーになります 24 c += int(L[i + 1][2]) 25 i += 1 26 if c % M != 0: 27 C += c // M + 1 28 else: 29 C += c // M 30 else: 31 if c % M != 0: 32 C += c // M + 1 33 else: 34 C += c // M 35 i += 1 36 37print(C)
試したこと
以下のコードでは4/10ケースでランタイムエラーとなってしまいます。
python
1M = int(input()) 2N = int(input()) 3 4L = [] 5for n in range(N): 6 L.append(input().split(" ")) 7 8i = 0 9C = 0 10while i < N: 11 x = int(L[i][0]) 12 c = int(L[i][2]) 13 while x == int(L[i + 1][0]): 14 c += int(L[i + 1][2]) 15 i += 1 16 if i + 1 == N: 17 break 18 if c % M != 0: 19 C += c // M + 1 20 else: 21 C += c // M 22 i += 1 23print(C)
追記
編集・追記依頼ありがとうございます。
問題のURLの記載は、問題サイトの規約に違反する恐れがありますので、控えさせていただきます。
4/10ケースでランタイムエラーのM,Lですが、入力データを見ることはできません。
[0]は、0 <= [0] <= 23を満たす整数値で、増えるしかなく、同じ数値は必ず連続します。
回答1件
あなたの回答
tips
プレビュー