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)