AtCoder

ABC380 B問題(Hurdle Parsing)を解く

AtCoder_ABC380_B

AtCoder が提供しているABC(AtCoder Beginner Contest)380 B問題をC++とPythonで解いてみました。ABC380は、2024年11月16日21:00に実施されました。

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

B問題 Hurdle Parsing(Difficulty : 27)

問題の詳細は、リンク先をご覧ください。

ABC380 B問題 Hurdle Parsing

指定された文字の間にある文字数をカウントします。AtCoder Problems による Difficulty は 27 でした。

解答案

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

最初の文字を除き、次に出現する文字 ‘|’ を探します。文字 ‘|’ があれば、その間にある文字数(変数 len)を配列 result に格納します。

最後に result を出力します。以下が、C++プログラムです。

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

int main()
{
	string s;
	cin >> s;

	vector<int> result;
	int len = 0;
	for (int i = 1; i < (int)s.length(); ++i) {
		if (s[i] == '|') {
			result.push_back(len);
			len = 0;
		} else {
			++len;
		}
	}

	for (int i = 0; i < (int)result.size(); ++i) {
		cout << result[i] << " \n"[i == (int)result.size() - 1];
	}

	return 0;
}

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

Python プログラム例(ABC380B)

Python版も基本的な考え方は同じです。以下がプログラムです。

"""AtCoder Beginner Contest 380 B"""
s = input()

result = []
length = 0
for i in range(1, len(s)):
    if s[i] == '|':
        result.append(length)
        length = 0
    else:
        length += 1

print(*result)

文字列メソッド split を使うプログラムも紹介します。文字列の先頭と最後の文字 ‘|’ を抜いて、split で分割して、map で長さを求める関数 len を適用します。1行で書いてみました。

"""AtCoder Beginner Contest 380 B"""
print(*map(len, input()[1:-1].split('|')))

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

最後に

特定の条件を満たす要素の間にある要素のカウントは、ある頻度で出題されるようです。

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

COMMENT

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

CAPTCHA