タムログ

プログラミングについての情報発信をしていきます!

AtCoder Beginner Contest 164 C を Python で

AtCoder Beginner Contest 164 C を Python で解説していきたいと思います。
それでは,早速解説していきます。
まずは問題文から。


C – gacha


実行時間制限: 2 sec / メモリ制限: 1024 MB

配点 : 300 点

問題文

くじ引きを N 回行い,i 回目には種類が文字列 Si で表される景品を手に入れました。

何種類の景品を手に入れましたか?

制約

  • 1≤N≤2×10^5
  • Si は英小文字のみからなり、長さは 1 以上 10 以下

入力

入力は以下の形式で標準入力から与えられる。

N
S1
:
SN

出力

何種類の景品を手に入れたか出力せよ。


入力例 1

3
apple
orange
apple

出力例 1

2

apple と orange の 2 種類の景品を手に入れました。


入力例 2

5
grape
grape
grape
grape
grape

出力例 2

1


入力例 3 

4
aaaa
a
aaa
aa

出力例 3

4


解説

文字列 S が N 個与えられ,その中で被りを無しで何種類のものがあるかを出力せよという問題です。
まずは S をリスト型で受け取ります。

Python では,重複しない要素の型である set 型というものがあります。これを使えば簡単に解けます。
set(S) で,S を重複のない型である set 型に変えることができるので,これの要素の数を出力します。
入力例1でこの関数がどう動くのか見てみます。

 

n = 3
S = ['apple’, 'orange’, 'apple’]
この状態で,
set_S = set(S)
# set (S) には 'apple’, 'orange’ が入っている。しかし順番はごちゃごちゃになってしまう。つまり
print(set_S)
# この出力が ['apple’, 'orange’] になるとは限らず, ['orange’, 'apple’] にもなりうる。

大変便利な型なので,ここで覚えておきましょう!
また,リストの長さは len を用いれば得ることができます。それでは,解答例に移ります。

解答例

n = int(input())
s =[]
for i in range(n):
    s.append(input())
 
print(len(set(s))) 

いかがだったでしょうか。
もしよろしければ,twitter のフォロー,いいね,RT よろしくお願いします!
こちらの励みになります😁
それでは!