公式

B - First ABC 2 解説 by Nyaan


初心者の方へ
  • プログラミングの学習を始めたばかりで何から手をつけるべきかわからない方は、まずは practice contest の問題A「Welcome to AtCoder」をお試しください。言語ごとに解答例が掲載されています。
  • また、プログラミングコンテストの問題に慣れていない方は、 AtCoder Beginners Selection の問題をいくつか試すことをおすすめします。
  • C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。

この問題は文字列の扱いと for 文のような繰り返し文の扱いができるかを問うている問題です。

問題文を読むと、この問題では次の条件を満たす最小の整数 \(n\) が聞かれているとわかります。 (存在しない場合は \(-1\) を出力)

  • \(1 \leq n \leq N - 2\)
  • \(S\)\(n\) 文字目は A
  • \(S\)\(n + 1\) 文字目は B
  • \(S\)\(n + 2\) 文字目は C

よって、for 文で \(n\)\(1, 2, \dots, N-2\) まで走査して、各 \(n\) について条件を満たすかを判定していけばよいです。また、\(S\)\(n\) 文字目が何であるかは多くのプログラミング言語では S[n] のような配列添え字演算子を利用すれば取得することができます。

C++, Python による実装例は次の通りです。(実装例を読む際、文字列型の先頭の文字が S[0] で始まる影響で \(n\) の値が \(1\) ずれているのに注意してください。)

  • C++
#include <iostream>
#include <string>
using namespace std;

int main() {
  int N;
  string S;
  cin >> N >> S;
  int ans = -1;
  for (int i = 0; i < N - 2; i++) {
    if (S[i] == 'A' and S[i + 1] == 'B' and S[i + 2] == 'C') {
      ans = i + 1;
      break;
    }
  }
  cout << ans << endl;
}
  • Python
N = int(input())
S = input()
ans = -1
for i in range(N-2):
    if S[i] == 'A' and S[i+1] == 'B' and S[i+2] == 'C':
        ans = i + 1
        break
print(ans)

投稿日時:
最終更新: