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

Pythonで特定の時刻に作業中だったプログラマーの人数を求める方法

区間(インターバル)のリストと、ある特定の時刻 time が与えられているとします。各区間は [start, end] という構造を持ち、それぞれのプログラマーが作業していた時間帯を表しています。このとき、指定した時刻に実際に作業していたプログラマーの人数を求めるのがこの問題です。

例として、入力が interval = [[2, 6], [4, 10], [5, 9], [11, 14]]time = 5 である場合を考えてみましょう。時刻 5 において作業中の区間は [2, 6][4, 10][5, 9] の3つであるため、出力は 3 となります。

解法のアプローチ

この問題は非常にシンプルで、以下の手順で解くことができます。

  • カウンター変数 count を 0 で初期化する。
  • 区間リスト内の各インターバルに対して以下を繰り返す。
    • 区間の開始時刻 starttime 以下であり、かつ終了時刻 endtime 以上であれば、count を 1 増やす。
  • 最後に count を返す。

この方法では各区間を1回ずつチェックするだけなので、計算量は O(n) となり、効率的です。

実装例

それでは、実際のコードを見て理解を深めましょう。

サンプルコード

class Solution:
    def solve(self, intervals, time):
        count = 0
        for interval in intervals:
            if interval[0] <= time and interval[1] >= time:
                count += 1
        return count

ob = Solution()
interval = [[2, 6], [4, 10], [5, 9], [11, 14]]
time = 5
print(ob.solve(interval, time))

入力

[[2, 6], [4, 10], [5, 9], [11, 14]], 5

出力

3

まとめ

このように、与えられた時刻が各区間の範囲内(start ≤ time ≤ end)に含まれているかどうかを順番に判定していくだけで、簡単に該当するプログラマーの人数を数えることができます。条件判定には不等号を使い、境界値(ちょうど開始時刻や終了時刻と一致する場合)もカウント対象に含めている点に注意しましょう。

  1. Pythonで与えられた数値がフィボナッチ数かどうかを判定する方法

    本記事では、与えられた数値がフィボナッチ数であるかどうかを判定する問題の解決策について解説します。 問題の定義 ある数値 n が与えられたとき、その数値がフィボナッチ数であるかどうかを判定します。 第 n 項のフィボナッチ数は、直前の2つのフィボナッチ数の和として定義されることは広く知られています。しかし、フィボナッチ数列には漸化式以外にも興味深い数学的性質があります。 フィボナッチ数の判定条件 ある数値 n がフィボナッチ数であるのは、「5×n² + 4」または「5×n² − 4」のいずれかが完全平方数であるとき、かつそのときに限る この性質を利用すれば、フィボナッチ数列を実際に生成しなくて

  2. Pythonでのベクトル化とは?NumPyによる高速な配列演算の基礎を解説

    本記事では、Python 3.xにおける「ベクトル化(Vectorization)」の概念と、その実装に用いられるさまざまなテクニックについて解説します。ループ処理を排除した効率的なコードの書き方を、具体例とともに見ていきましょう。 ベクトル化とは何か? ベクトル化とは、ループを使用せずに配列操作を実装するテクニックです。関数を活用することで、コードの実行時間や計算時間を大幅に短縮できます。 ベクトル化では、配列に対して個別に処理を行うのではなく、ベクトル全体に対して一括で演算を実行します。代表的な演算には以下のようなものがあります。 ドット積(内積・スカラー積):2つのベクトルから単一のス