【競プロ】過去問精選100問「三井住友信託銀行プログラミングコンテスト 2019 D - Lucky PIN」解法
Free-PhotosによるPixabayからの画像

はじめに

このシリーズではレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】でまとめられている100問をPythonで解いています。

問題

三井住友信託銀行プログラミングコンテスト 2019 D - Lucky PIN

ポイント

この問題は全探索を用いて解くことができます。

暗証番号は3桁しかないため、全部で1000通りです。

全ての暗証番号のパターンについて、与えられているSから3つの数字を左から順に選んで作成できるかを調べます。

コード

def main():
    N = int(input())
    S = input()
    result = set()  # 重複を許さないためにsetを使用

    for i in range(0, 10):
        for j in range(0, 10):
            for k in range(0, 10):
                index = S.find(str(i))  # iがSの中で初めて出てくるインデックスを記憶
                if index != -1:  # iがSの中に存在したら
                    index = S.find(str(j), index + 1)  # iより右の範囲でjを探す
                if index != -1:  # jがSの中に存在したら
                    index = S.find(str(k), index + 1)  # jより右の範囲でkを探す
                if index != -1:  # kがSの中に存在したら
                    result.add(str(i) + str(j) + str(k))  # resultに暗証番号を格納

    print(len(result))


if __name__ == '__main__':
    main()
おすすめの記事