AtCoder

ABC295 A問題(Probably English)を解く

AtCoder_ABC295_A

AtCoder が提供しているABC(AtCoder Beginner Contest)295 のA問題をC++とPythonで解いてみました。ABC295は、2023年3月25日21:00に実施されました。

AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。

A問題 Probably English(Difficulty : 15)

問題はリンク先をご覧ください。

ABC295 A問題 Probably English

与えられた文字列が特定の文字列か判定する問題です。AtCoder Problems による Difficulty は 15 でした。

解答案

問題を以下の方針で解きます。

  • N と文字列 Wi を読み込む。
  • それぞれの Wi が、”and”、”not”、”that”、”the”、”you” のどれかと一致するか確認する。
  • ひとつでも一致していたら “Yes” を、それ以外の場合は “No” を出力する。

C++ プログラム例(ABC295A)

上で記述した方針に従います。

文字列 Wi が一致しているか if 文で確認しました(15-19行目)。以下が、C++プログラムとなります。

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	cin >> n;
	vector<string> w(n);
	for (int i = 0; i < n; ++i) {
		cin >> w[i];
	}

	bool result = false;
	for (int i = 0; i < n; ++i) {
		if ((w[i] == "and")
		  ||(w[i] == "not")
		  ||(w[i] == "that")
		  ||(w[i] == "the")
		  ||(w[i] == "you")) {
			result = true;
		}
	}

	if (result) {
		cout << "Yes" << endl;
	} else {
		cout << "No" << endl;
	}

	return 0;
}

候補となる文字列を配列 a に格納して確認するプログラムも紹介します。このプログラムの方が、候補となる文字列が固まっているため、確認がしやすいと思います(13行目)。

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	cin >> n;
	vector<string> w(n);
	for (int i = 0; i < n; ++i) {
		cin >> w[i];
	}

	vector<string> a = {"and", "not", "that", "the", "you"};
	bool result = false;
	for (int i = 0; i < n; ++i) {
		for (int j = 0; j < a.size(); ++j) {
			if (w[i] == a[j]) {
				result = true;
			}
		}
	}

	if (result) {
		cout << "Yes" << endl;
	} else {
		cout << "No" << endl;
	}

	return 0;
}

どちらも AC(Accepted=正しいプログラム)と判定されました。

Python プログラム例(ABC295A)

Python は、演算子 in で候補となる文字列のどれかと一致しているか判定できます(8行目)。すっきりとプログラムが表現できています。

"""AtCoder Beginner Contest 295 A"""
n = int(input())
w = list(input().split())
a = ["and", "not", "that", "the", "you"]

result = False
for i in range(n):
    if w[i] in a:
        result = True

print("Yes" if result else "No")

こちらも「AC」と判定されました。

最後に

この問題は与えられている5つの文字列をミススペルしたら、ACが取れないため、十分によく見てから提出することになります。

現実の製品開発では、5つのミススペルが検出できるようにテストケースを用意します。提出時間が重要な競プロでは、正確に目視確認ができることも必要なスキルだと思います。

ABC295 について、引き続き、D問題まで紹介します。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA