A - Triple Four 解説
by
sounansya
AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
まず、「より厳密は、」以降に書かれている「 \(1\) 以上 \(N-2\) 以下の整数 \(i\) であって、 \(A_i=A_{i+1}=A_{i+2}\) を満たすものが存在するか判定」することを考えます。
多くのプログラミング言語は 0-indexed 、つまり配列で \(A\) を持ったときの先頭の項が \(A[1]\) ではなく \(A[0]\) であるので、この条件はプログラムで書く際には「 \(0\) 以上 \(N-2\) 未満の整数 \(i\) であって、 \(A_i=A_{i+1}=A_{i+2}\) を満たすものが存在するか判定」することになります。
この判定は for 文を用いて行うことができます。
実際にプログラムを作成する方法についてはいくつか方法がありますが、例えば for 文で \(i\) を順に探索していく際に
- 条件を満たす \(i\) が見つかった時点で
Yes
を出力し、プログラムを終了する。 for 文が終わった段階でプログラムが終了していないということは答えはNo
なので、No
を出力する。 - 関数・メソッドとして判定部分を実装する。そのような \(i\) が見つかった時点で
Yes
(または True などYes
に相当するもの) を返す。for 文が終わった段階で関数内の処理が続いているということは答えはNo
なので、No
(または False などNo
に相当するもの) を返す。
などの方法が簡潔でプログラムも短くなります。
以下はそれぞれの方法でプログラムを書いた場合の C++・Python のサンプルコードです。
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < n - 2; i++) {
if (a[i] == a[i + 1] && a[i + 1] == a[i + 2]) {
cout << "Yes" << endl;
return 0;
}
}
cout << "No" << endl;
return 0;
}
n = int(input())
a = list(map(int, input().split()))
for i in range(n - 2):
if a[i] == a[i + 1] == a[i + 2]:
print("Yes")
exit()
print("No")
#include <bits/stdc++.h>
using namespace std;
bool judge(int n, vector<int> a) {
for (int i = 0; i < n - 2; i++) {
if (a[i] == a[i + 1] && a[i + 1] == a[i + 2]) {
return true;
}
}
return false;
}
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
if (judge(n, a)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
def judge(n, a):
for i in range(n - 2):
if a[i] == a[i + 1] == a[i + 2]:
return True
return False
n = int(input())
a = list(map(int, input().split()))
if judge(n, a):
print("Yes")
else:
print("No")
投稿日時:
最終更新: