演習課題「日別訪問者数の最大平均区間」
あなたは、とあるウェブサイトを管理していました。
ある連続したk日間、このウェブサイトでキャンペーンを行ったのですが、いつからいつまでの期間に行ったかを忘れてしまいました。
幸い、ウェブサイトを運営していた全n日分のアクセスログが残っており、1日毎(いちにちごと)の訪問者数が分かっています。
とりあえず、連続するk日の中で、1日あたりの平均訪問者数が最も多い期間を、キャンペーンを行った期間の候補だと考えることにしました。
n日分の訪問者数のリストとキャンペーンの日数kが入力されるので、キャンペーンを行った期間の候補数と、候補の中で最も早い開始日を出力してください。
プログラムを実行して、想定どおり出力されれば演習課題クリアです!
※ この演習課題は、Python3でのみ解答することができます。
期待する出力値
1 2
#02:問題を解く
前回のチャプターでは、問題文を読みどのように処理していけば良いかを学習しました。
このチャプターでは、実際にコードを書いて解答を作っていきましょう。
# n と k を取得
input_str = input().split() # スペース区切りで取得
n = int(input_str[0])
k = int(input_str[1])
# a_1, a_2 ... a_n を取得
input_list = input().split()
a_list = []
for a_i in input_list:
a_list.append(int(a_i))
# キャンペーンの各区間の平均値
average = []
for i in range(n - k + 1):
i_average = 0
for j in range(k): # k日間分足して平均を求める
i_average += a_list[i + j]
average.append(i_average / k)
ans_max = 0
for i in average: # 最大値をループで探す
if ans_max < i:
ans_max = i
ans_first_max = 0
for i in average: # 最初に出てくる日を探す
if i == ans_max:
break
ans_first_max += 1
ans_count = 0
for i in average: # 最大値と同じ値の個数を求める
if ans_max == i:
ans_count += 1
print(str(ans_count) + " " + str(ans_first_max + 1))
データ構造 — Python 3.6.5 ドキュメント
https://docs.python.jp/3/tutorial/datastructures.html
日別訪問者数の最大平均区間
下記の問題をプログラミングしてください。
あなたは、とあるウェブサイトを管理していました。
ある連続したk日間、このウェブサイトでキャンペーンを行ったのですが、いつからいつまでの期間に行ったかを忘れてしまいました。
幸い、ウェブサイトを運営していた全n日分のアクセスログが残っており、1日ごとの訪問者数が分かっています。
とりあえず、連続するk日の中で、1日あたりの平均訪問者数が最も多い期間を、キャンペーンを行った期間の候補だと考えることにしました。
n日分の訪問者数のリストとキャンペーンの日数kが入力されるので、キャンペーンを行った期間の候補数と、候補の中で最も早い開始日を出力してください。
入力される値
入力は2行から成ります。
1行目にはnとkが半角スペース区切りで入力されます。
2行目にはn個の整数a_1, a_2, …, a_nが半角スペース区切りで入力されます。a_iはi日目の訪問者数を表します。
入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。
期待する出力
キャンペーンを行った期間の候補数と、候補の中で最も早い開始日を、この順で半角スペース区切りで1行で出力してください。
条件
すべてのテストケースにおいて、以下の条件をみたします。
・1≦n≦1,000
・1≦k≦n
・0≦a_i≦100
入力例1
5 3
1 2 3 2 1
出力例1
1 2
入力例2
10 2
6 2 0 7 1 3 5 3 2 6
出力例2
5 1