【ABC201 C】「Secret Number」を解く【Python3】

「AtCoder」解説一覧へ

高橋くんが忘れてしまった暗証番号として、あり得るものが何通りあるか求める問題です。

提出
s = input()
ans = 0

for i in range(10000):
    check = True
    flag = [False]*10
    now = str(i).zfill(4)
    for j in range(4):
        flag[int(now[j])]=True
    for j in range(10):
        if s[j]=="o" and flag[j]==False:
            check = False
        if s[j]=="x" and flag[j]:
            check = False
    if check:
        ans += 1

print(ans)

入力は文字列Sのみです。

「0000~9999」までの数字を全探索し、文字列Sで分かる条件に当てはまっているかどうかを調べ、当てはまっていれば、答えの「ans」を足していく、という方法で求めていきます。

要素が10個のflagリストを作成し、すべて「False」にしておき、そのときの4桁の数字だけ「True」にします。

zfill() は右寄せで0埋めするメソッドです。4は桁数となります。

この4桁のflagを「True」にした後、文字列Sの条件に当てはまっているかを確認します。

Sjが「o」のときは、確実に含まれているはずなので、「flag[j]==False」とはなりません。

Sjが「x」のときの「flag[j]==True」もあり得ないです。

上記2つの場合に「check = False」をして、最後に「check」を確認し、Trueであれば、「ans」に1足します。

【ABC201】解説記事リスト


「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です