[BaekJoon]13458:監査
🔒 質問する
全部でN個の試験場があり、試験場ごとに受験者がいる.i番試験場の受験者はAi名です.
監督員には総監と副監督の2種類がある.監督試験者が1つの試験場で監視できる受験者はB名、副監督者が1つの試験場で監視できる受験者はC名である.
各試験場には監督が1人しかいないので、いくつかの副監督試験があります.
試験場ごとに受験生を監視しなければならない.この場合、必要な監督人数の最大値を求めるプログラムを作成してください.
🛫 入力
1行目は試験場の個数N(1≦N≦1000000)を与える.
2行目は各試験場の受験者数Ai(1≦Ai≦1000000)を与える.
3行目はBとCです.(1 ≤ B, C ≤ 1,000,000)
🛬 しゅつりょく
試験場ごとに受験生を監督するために必要な最小限の監督人数が出力されます.
🔑 に答える
表タイムアウトコード
n = int(input()) # 시험장 수
a = list(map(int, input().split())) # 각 시험장 응시자 수
b, c = map(int, input().split())
result=0
for i in range(len(a)) :
a[i] -= b
result += 1
while (a[i] > 0) :
a[i] -= c
result += 1
print(result)
念のためpypy 3で回したらタイムアウト二重複文が時間の複雑さを増したからだ.
🍀 正解!
n = int(input()) # 시험장 수
a = list(map(int, input().split())) # 각 시험장 응시자 수
b, c = map(int, input().split())
result=0
for i in range(len(a)) :
a[i] -= b
result += 1
if (a[i] > 0) :
d = a[i]//c
result+= d
if (a[i] % c > 0) :
result += 1
print(result)
🏅 Refactoring考えてみれば、総監督の人数は結局n人で、別に数えなくてもいい.
出力値はnの値に加算してもよく、変数として別途設定する必要はありません.
n = int(input()) # 시험장 수
l = list(map(int, input().split())) # 각 시험장 응시자 수
b, c = map(int, input().split())
for i in range(len(l)) :
a[i] -= b
if (a[i] > 0) :
d = a[i]//c
n += d
if (a[i] % c > 0) :
n += 1
print(result)
このようにすれば、副監督官の数だけ数えることができ、for文の二重for文の式は、入力エラーで整数を返す関数ceil(mathモジュールimportが必要)と、範囲内の最大値データ型を返すmax関数とで実現できる.import math
n = int(input()) # 시험장 수
l = list(map(int, input().split())) # 각 시험장 응시자 수
b, c = map(int, input().split())
for i in l :
n += math.ceil(max(0,(i-b)/c))
print(n)
📌 Pinned
n個の入力をlistに変換する方法
a = list(map(int, input("Enter a multiple value: ") .split() ))
Pythonのリストの要素を順番に参照する場合:for i in listname
...
l=list(map(int,input().split()))
...
for i in l:
n+=math.ceil(max(0,(i-a))/b)
Reference
この問題について([BaekJoon]13458:監査), 我々は、より多くの情報をここで見つけました https://velog.io/@kpk0616/BaekJoon-13458-시험-감독テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol