はじめに
paiza×Qiitaコラボキャンペーン ということ、過去に一度練習したことがあるランクB問題ですが、理解度の確認を兼ねて再度実施しました。
不適切な部分について、ご指摘いただけるとありがたいです。
私の回答例
# coding: utf-8
N, M =map(int,input().split())
value =[[int(x) for x in input().split()] for _ in range(M)]
seat_availability = [True] * N #各シートが着席できるかどうか
guests_num = 0 #着席したお客の総数
for m in range(M):
entering_num = value[m][0] #入店したお客の人数
seat_num = value[m][1] - 1 #着席する最初のシート番号
#入店したお客が最大シート数をまたがない場合
if seat_num + entering_num <= N:
if not False in seat_availability[seat_num : seat_num + entering_num]:
#着席したお客の総数に今入店したお客の人数を加算
guests_num += entering_num
#当該シートにお客が着席
seat_availability[seat_num : seat_num + entering_num] = [False] * entering_num
#入店したお客が最大シート数をまたがない場合
else:
if not False in seat_availability[seat_num :] and not False in seat_availability[: ((seat_num + entering_num) % N)]:
#着席したお客の総数に今入店したお客の人数を加算
guests_num += entering_num
#当該シートにお客が着席
seat_availability[seat_num : seat_num + entering_num] = [False]* entering_num
print(guests_num)
座席 n と座席 1 が隣り合っており、プログラム上で表現する際、n で割った剰余を用いるところが、この練習問題の肝でしょうか
解答コード例は、for
を使用して1席ずつ確認するものでしたが、私はin
で確認しました。違いはよく分かっていません。
変数の名称も長くて読みづらいですね。英語が苦手でgoogle翻訳でその都度調べて変数名としているのが、原因のひとつかな。
Qiitaのストック記事を読み直します。