AtCoder

ABC297 C問題(PC on the Table)を解く

AtCoder_ABC297_C

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

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

C問題 PC on the Table(Difficulty : 96)

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

ABC297 C問題 PC on the Table

与えられた文字列を置き換える問題です。AtCoder Problems による Difficulty は 96 でした。

解答案

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

  • H と W、H 個の文字列 Si を読み込む。
  • 各 Si の文字列 “TT” を “PC” に置き換えた文字列を出力する。

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

読み込んだ Si に対して、’T’ の次の文字が ‘T’ か調べています。どちらも ‘T’ の場合は、前の文字を ‘P’ に次の文字を ‘C’ に置き換えます(15から17行目)。

以下が、C++プログラムとなります。

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

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

	for (int i = 0; i < h; ++i) {
		for (int j = 0; j < w - 1; ++j) {
			if ((s[i][j] == 'T')&&(s[i][j + 1] == 'T')) {
				s[i][j] = 'P';
				s[i][j + 1] = 'C';
			}
		}
	}

	for (int i = 0; i < h; ++i) {
		cout << s[i] << endl;
	}

	return 0;
}

置換を行うライブラリを使ったプログラムも紹介します。複数回数の置換には、regex_replace を使います。以下は、この関数の使用例も示しています(14行目)。

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

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

	for (int i = 0; i < h; ++i) {
		cout << regex_replace(s[i], regex("TT"), "PC") << endl;
	}

	return 0;
}

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

Python プログラム例(ABC297C)

Python は、関数 replace を使い置換しました(6行目)。

"""AtCoder Beginner Contest 297 C"""
h, w = map(int, input().split())
s = [input() for i in range(h)]

for i in range(h):
    print(s[i].replace("TT", "PC"))

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

最後に

文字列の置き換えは、ABC286 B問題でも使いました。ライブラリ関数を使う回数が増えて慣れてきました。

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

COMMENT

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

CAPTCHA