はじめに
このシリーズではレッドコーダーが教える、競プロ・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()