バケット(辞書型編)

バケット(辞書型編)

前回は、配列 を使ってバケットの手法を実現しましたか、今回は 辞書型 を使ってバケットの手法を実現してみます。

問題は前回と同様のものを使います。

[問題]

N個 の正の整数があります。

この中に含まれる数値の種類の個数を求めて下さい。

[条件]

・各数字は、1以上10以下の整数

解法・ソースコード

前回は配列のインデックスと入力の数字を対応させました。

辞書型では、入力の数字を 辞書型のキー とし、数字の個数を 辞書型のバリュー(値) としてみます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
#---------- 入力例 ----------
lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9]
#----------------------------
bucket = {} # バケットを辞書型として定義
# 入力リストからバケットを作成
for l in lst:
if l in bucket: # バケットにすでにキーがある場合
bucket[l] += 1 # カウントアップ
else: # バケットにまだキーがない場合
bucket[l] = 1 # 1つ目としてバケット(辞書型)に登録

print('バケット:', bucket)
print('解(種類の個数):', len(bucket))

前回配列を使ったときとコード量はあまり変わりませんが、配列では固定のエリア(数字の種類分の配列)を確保する必要があり未使用になる可能性もあったので、辞書型の方が無駄なく実装できているような気がします。

バケット: {3: 2, 1: 2, 4: 1, 5: 3, 9: 2, 2: 1, 6: 1, 8: 1}

解(種類の個数): 8

解は 8 となり、前回記事と同様に入力の数字の種類が 8種類 であることが確認できました。