Python
 Computer >> コンピューター >  >> プログラミング >> Python

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
  1. Pythonでリスト内の最小値を見つける方法を解説

    この記事では、リストの中から最小の数値を見つける方法について、具体的なサンプルコードとともに詳しく解説します。問題の概要問題: 数値のリストが与えられたとき、その中に含まれる最も小さい数値を画面に表示すること。この問題を解くアプローチは主に2つあります。ひとつは sort() メソッドを使ってリストを昇順に並べ替え、先頭の要素(インデックス0)を取得する方法。もうひとつは、Pythonに標準で用意されている組み込み関数 min() を使う方法です。それぞれ順番に見ていきましょう。方法1:sort()メソッドで並べ替えて最小値を取得するまずはリストを昇順にソートし、先頭の要素を取り出す方法です。

  2. Pythonで数値の階乗を求める方法を解説!forループとrange関数の使い方

    階乗(factorial)とは、1からその数までのすべての整数を掛け合わせた積のことです。例えば、5の階乗は「5 × 4 × 3 × 2 × 1 = 120」となります。 Pythonで指定した数の階乗を求めるには、range()関数を使って1からその数まで繰り返すforループを作成します。ここで注意すべき点は、range()関数は終了値(ストップ値)を含まないという仕様です。そのため、終了値は入力された数値より1大きい値(num+1)を指定する必要があります。 階乗を求めるPythonコードの例 ループ内では、各数値を変数 f に累積的に掛けていきます。この変数 f は初期値として 1 を設