Pythonで時刻tにスタジアムで立っている観客の数を求める方法
スタジアムにはn人の観客がおり、それぞれ1からnまでの番号が付けられています。観客は以下のルールに従って、順番に立ち上がったり座ったりします。
- 時刻t1に、1番目の観客が立ちます。
- 時刻t2に、2番目の観客が立ちます。
- ……
- 時刻tkに、k番目の観客が立ちます。
- 時刻tk+1に、(k+1)番目の観客が立ち、同時に1番目の観客が座ります。
- 時刻tk+2に、(k+2)番目の観客が立ち、同時に2番目の観客が座ります。
- ……
- 時刻tnに、n番目の観客が立ち、同時に(n−k)番目の観客が座ります。
- 時刻tn+1に、(n+1−k)番目の観客が座ります。
- ……
- 時刻tn+kに、n番目の観客が座ります。
例えば、入力が n = 11、k = 6、t = 4 の場合、出力は4になります。これは、時刻t1で1番目の観客が立ち、時刻t2で2番目、時刻t3で3番目、そして時刻t4で4番目の観客が立つためです。つまり、その時点で合計4人の観客が立っていることになり、結果は4となります。
解き方
この問題は、時刻tの値を3つのケースに分けて考えることで解決できます。
- t ≤ k の場合: 観客がまだ順番に立ち上がっている途中なので、tをそのまま返します。
- k < t ≤ n の場合: 立ち上がりが完了し、まだ誰も座り始めていないため、常にkを返します。
- t > n の場合: 観客が座り始める段階です。まず res = t − n として、すでに座った人数を求め、次に res = k − res で立っている人数を計算して返します。
このように、単純な条件分岐だけでO(1)の計算量で答えを導き出せるのがポイントです。
実装例
理解を深めるために、Pythonでの実装例を見てみましょう。
def how_many_stand(n, k, t):
if t <= k:
return t
elif t <= n:
return k
else:
res = t - n
res = k - res
return res
n = 11
k = 6
t = 4
print(how_many_stand(n, k, t))
入力
11, 6, 4
出力
4
-
Pythonでリスト内の最小値を見つける方法を解説
この記事では、リストの中から最小の数値を見つける方法について、具体的なサンプルコードとともに詳しく解説します。問題の概要問題: 数値のリストが与えられたとき、その中に含まれる最も小さい数値を画面に表示すること。この問題を解くアプローチは主に2つあります。ひとつは sort() メソッドを使ってリストを昇順に並べ替え、先頭の要素(インデックス0)を取得する方法。もうひとつは、Pythonに標準で用意されている組み込み関数 min() を使う方法です。それぞれ順番に見ていきましょう。方法1:sort()メソッドで並べ替えて最小値を取得するまずはリストを昇順にソートし、先頭の要素を取り出す方法です。
-
Pythonで数値の階乗を求める方法を解説!forループとrange関数の使い方
階乗(factorial)とは、1からその数までのすべての整数を掛け合わせた積のことです。例えば、5の階乗は「5 × 4 × 3 × 2 × 1 = 120」となります。 Pythonで指定した数の階乗を求めるには、range()関数を使って1からその数まで繰り返すforループを作成します。ここで注意すべき点は、range()関数は終了値(ストップ値)を含まないという仕様です。そのため、終了値は入力された数値より1大きい値(num+1)を指定する必要があります。 階乗を求めるPythonコードの例 ループ内では、各数値を変数 f に累積的に掛けていきます。この変数 f は初期値として 1 を設