Port 53

明日のための技術メモ

AtCoder ABC155

AtCoder ABC155解いた分だけまとめ。
とりあえずレートが昨年末くらいに戻った...よかった...
結果はABC3完。D問題がめちゃくちゃ難しかったのびっくりした。
解いてないけど。

目次

A. Poor

問題文 f:id:saturn-glave:20200223013722p:plain

入力されたリストを重複削除をして、もとの長さと変わるかで結果を判定する。
またset出てきたね。学生時代散々使った記憶ある。

ACしたコード

#coding:utf-8
num = list(map(int, input().split()))

num_list = set(num)

if len(num_list) == 2:
    print('Yes')
else:
    print('No')

B. Papers, Please

問題文 f:id:saturn-glave:20200223013941p:plain

問題の通り実装できますか?系の話なんだけど、見事に引っかかって
時間かけすぎてしまった。
入国可能な条件は以下の通り。奇数だけの時も入国OKだったという条件を間違えていた。
xが書類に書かれている整数のうち、偶数であるものならば、xは3または5で割り切れる。 つまり、入国拒否になる場合は、
xが書類に書かれている整数のうち、偶数なのに3でも5で割り切れないものがある

ACしたコード

全部奇数のときの場合分けはいらなかったと思う。
入国拒否があればプログラムを終了させるため、exit() を使った。

#coding:utf-8
n = int(input())
a = list(map(int, input().split()))
num = []

#偶数だけ抜き出し
for i in range(0, n):
    if a[i] % 2 == 0:
       num.append(a[i])

#print(num)

#全部奇数の場合は入国許可
if len(num) == 0:
    print('APPROVED')
    exit()
else:
    for j in range(0, len(num)):
        if num[j] % 3 != 0 and num[j] % 5 != 0:
            print('DENIED')
            exit()

print('APPROVED')

C. Poll

問題文 f:id:saturn-glave:20200223015102p:plain bた辞書形式のやつ。辞書をまだ息をするように書けない。
単語ごとに書かれた回数を集計し、最も多いものをすべて辞書順に出力する。

ポイント

  • 集計にcollectionsライブラリを使う
  • 各要素の出現回数を一括で取得するには、collections.Counter が便利
    • Counterオブジェクトが生成される
    • dictのようにkey, valueで値の取り出しが可能

ACしたコード

#coding:utf-8
import collections

n = int(input())
s = [input() for _ in range(n)]
ans = []

# 集計後、出現回数の最大値を取得
c = collections.Counter(s)
count_max = max(c.values())

# 出現回数が最多だった単語をすべて抜き出し
for key, num in c.items():
    if num == count_max:
        ans.append(key)

ans = sorted(ans)

for i in ans:
    print(i)

参考

PythonのCounterでリストの各要素の出現個数をカウント