3
0

はじめに

 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のストック記事を読み直します。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0