トヨタ自動車プログラミングコンテスト2023#4(AtCoder Beginner Contest 311)の解説記事です。
目次
ABC311 A – First ABC
問題
問題文の要約は以下の通りです。
問題の要約
A, B, C からなる文字列 \(S\) が与えられます。A, B, Cが全て1 回以上含まれるのは左から何文字目まで見たときに満たすか、最小値を求めよ。
制約
・\(3 \le N \le 100\)
・\(S\) はA, B, C からなる長さ \(N\) の文字列
・\(S\) はA, B, Cをすべて含む
入力
\(N\)
\(S\)
出力
答えを出力せよ。
解説
左から順番に見て、A, B, Cがすべて出現したときの文字数を出力する。
解説
まず入力 \(N\) をint型、\(S\) を文字列として受け取ります。
N=int(input())
S=input()A, B, Cが出現したかどうかを表すフラグを準備します。
flag_a=False
flag_b=False
flag_c=False左の文字から順にfor文で見て、A, B, Cであれば、それぞれが出現したかを表すフラグをTrueにします。
for i in range(N):
if S[i]=='A':
flag_a=True
if S[i]=='B':
flag_b=True
if S[i]=='C':
flag_c=TrueA, B, Cすべての文字が出現していたら、答えを出力します。for文は0-indexedのため、答えはプラス1をします。
if flag_a and flag_b and flag_c:
print(i+1)
exit()解答
N=int(input())
S=input()
flag_a=False
flag_b=False
flag_c=False
for i in range(N):
if S[i]=='A':
flag_a=True
if S[i]=='B':
flag_b=True
if S[i]=='C':
flag_c=True
if flag_a and flag_b and flag_c:
print(i+1)
exit()
