paiza 問題「長テーブルのうなぎ屋 Python3編」解けました

300日ぶりくらいにやってみたら解けたという。寝かせてみるもんですね。
問題はhttps://paiza.jp/works/mondai/skillcheck_sample/long-table

  • 配列sheetで席を表現して、人が座ってたら1、座ってなかったら0にする。
  • グループiのj番目の人が座れるかどうかを順番に判定してダメだったら即ループを脱出するようにした。
  • なんかこう、実行時間が長めかと。最後のテストは0.04秒かかってしまった。
s = input().split()
#print(s)
num_sheet = int(s[0])
group = int(s[1])

c=[]
for i in range(group):
    c.append(list( map(int , input().split()) ) )

#print(c)

sheet =[]
for i in range(num_sheet):
    sheet.append(0)
#print(sheet)

for i in range(group): #i番目のグループ
    flag = 0
    #print("Group "+str(i) )
    
    for j in range(c[i][0]):
        #print("  j+c[i][1]-1 is "+str(j+c[i][1]-1) )
        
        if (j+c[i][1]-1) <= (num_sheet - 1): #i番目のグループのj番目の人がnum_sheeetを超えないとき
            if sheet[j+c[i][1]-1] ==1 : #人がいたらBreak
                #print("  break")
                break
            else :
                flag += 1
                
        elif (j+c[i][1]-1) > (num_sheet - 1) : #i番目のグループのj番目の人がnum_sheeetを超えたとき
            if sheet[j+c[i][1]-1-num_sheet] ==1 : #人がいたらBreak
                #print("  break")
                break
            else :
                flag += 1
    
    if flag == c[i][0] : #みんな座れたら次に進む
        #print("  this group can be seated!")
        for k in range(c[i][0]):
            if k+c[i][1]-1 <= (num_sheet - 1): #i番目のグループのj番目の人がnum_sheeetを超えないとき
                sheet[k+c[i][1]-1] = 1
            else : #i番目のグループのj番目の人がnum_sheeetを超えたとき
                sheet[k+c[i][1]-1-num_sheet] = 1 
    #print(sheet)

res=0
for i in range(num_sheet):
    if sheet[i]==1:
        res += 1
        
print(res)