AtCoder

ABC274 B問題(Line Sensor)を解く

AtCoder_ABC274_B

AtCoder が提供しているABC(AtCoder Beginner Contest)274 のB問題をC++とPythonで解いてみました。ABC274は、2022年10月22日21:00に実施されました。

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

B問題 Line Sensor(Difficulty : 48)

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

ABC274 B問題 Line Sensor

ある条件に従い、数字の頻度をカウントする問題です。AtCoder Problems による Difficulty は、48 でした。

解答案

問題を解く方針を書きだします。

  • H と W を読み込み、H 個の文字列を読み込む。
  • 読み込んだ長さ W の文字列に対して、’#’ がある場所のカウンターを増やす。
  • 最後に、それぞれの場所にあった ‘#’ の個数を出力する。

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

制約から $1 \leqq W \leqq 1000$ であるため、要素をW個持つ vector コンテナを定義します。’#’ が登場する回数を記録して出力します。以下が、解答例です。

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

int main()
{
	int h, w;
	cin >> h >> w;

	vector<int> m(w, 0);
	for (int i = 0; i < h; ++i) {
		string s;
		cin >> s;
		for (int j = 0; j < w; ++j) {
			if (s[j] == '#') {
				++m[j];
			}
		}
	}

	for (int j = 0; j < w; ++j) {
		if (j != 0) {
			cout << " ";
		}
		cout << m[j];
	}
	cout << endl;

	return 0;
}

出力では、それぞれの数字の間に半角スペースを1個入れる必要があります。

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

Python プログラム例(ABC274B)

Python では vector の代わりにリストを使います。C++ 版のプログラムを置き換えただけなので、あまり Python らしいプログラムではないかもしれません。

出力は、C++ より楽で、リスト変数に ‘*’ を付けることで、想定した出力を得ることができました。

"""AtCoder Beginner Contest 274 B"""
h, w = map(int, input().split())
m = [0] * w
for i in range(h):
    s = input()
    for j in range(w):
        if s[j] == "#":
            m[j] += 1

print(*m)

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

最後に

B問題として、よく出題されるタイプの問題です。このような問題を素早く解けるようになっていくと、レートが上がっていくと思われます。

引き続き ABC の問題を紹介していきます。

COMMENT

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

CAPTCHA