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

Pythonでキャンディーを一列に並んだ人々に配布するアルゴリズム

n人の人々が一列に並んでいるとき、次のようなルールに従ってキャンディーを配りたいとします。

  • まず、1番目の人に1個、2番目の人に2個……というように順番に個数を増やしながら配り、最後のn番目の人にはn個渡します。
  • その後、列の先頭に戻り、1番目の人にn+1個、2番目の人にn+2個……と同じ要領で配り、最後のn番目の人には2×n個渡します。

このプロセスをキャンディーがなくなるまで繰り返します。途中でキャンディーが足りなくなった場合は、その時点で残っているすべてのキャンディーをその人に渡します(直前の人より必ずしも1個多いとは限りません)。

最終的な配布結果を表す配列を返す必要があります。例えば、キャンディーの総数が7個、人数が3人の場合、出力は[2, 2, 3]となります。処理の流れを順に見てみましょう。

  • 最初に1番目の人が1個もらい、配列は[1, 0, 0]になります。
  • 次に2番目の人が2個もらい、配列は[1, 2, 0]になります。
  • 続いて3番目の人が3個もらい、配列は[1, 2, 3]になります。
  • 最後に再び先頭に戻り、1番目の人が残りの1個を受け取るので、配列は[2, 2, 3]になります。

解決のための手順

  • n要素の配列resを作成し、すべて0で初期化します。
  • indexを0に設定します。
  • candiesが0より大きい間、以下を繰り返します。
    • res[index mod n]にmin(candies, index + 1)を加算します。
    • candiesから(index + 1)を引きます。
    • indexを1増やします。
  • resを返します。

実装例

理解を深めるために、以下のPythonコードで実際の実装を確認してみましょう。

class Solution(object):
    def distributeCandies(self, candies, num_people):
        res = [0 for i in range(num_people)]
        index = 0
        while candies>0:
            res[index%num_people] += min(candies,index+1)
            candies-=(index+1)
            index+=1
        return res

ob1 = Solution()
print(ob1.distributeCandies(8, 3))

入力

8
3

出力

[3, 2, 3]

この例では、キャンディー8個を3人に配布しています。1巡目で各人が1個・2個・3個ずつ受け取り[1, 2, 3]となった後、2巡目で1番目の人が4個もらおうとしますが、残りは2個しかないため2個だけを受け取ります。そのため、最終的な結果は[3, 2, 3]となるのです。

  1. 【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説

    はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが

  2. Pythonのアンダースコア(_)の使い方を徹底解説!シングルとダブルの違いとは

    Pythonでは、状況に応じてシングルアンダースコア(_)とダブルアンダースコア(__)を使い分けます。一見すると単なる記号に見えますが、それぞれに明確な役割や慣習が存在します。 Pythonでアンダースコアが使われる主なケースは以下のとおりです。 インタプリタで最後に評価した式の値を保持したい場合 特定の値を意図的に無視したい場合 変数名や関数名の宣言において特別な意味を持たせたい場合 数値リテラルの桁区切りとして使いたい場合 国際化(i18n)や地域化(l10n)の関数として使いたい場合 それでは、それぞれのケースについて具体例を見ていきましょう。 インタプリタでの使用 Pythonの