トヨタ自動車プログラミングコンテスト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=True
A
, 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()