AtCoder

ABC394 D問題(Colorful Bracket Sequence)を解く

AtCoder_ABC394_D

AtCoder が提供しているABC(AtCoder Beginner Contest)394 D問題をC++とPythonで解いてみました。ABC394は、2025年2月22日21:00に実施されました。

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

D問題 Colorful Bracket Sequence(Difficulty : 253)

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

ABC394 D問題 Colorful Bracket Sequence

スタックを使って文字列を削除していきます。AtCoder Problems による Difficulty は 253 でした。

解答案

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

3種類の括弧、すなわち ()、[]、<> を再帰的に削除した結果、空文字列になるかを確認します。文字列をスタックと考えて処理しました。

以下が、C++プログラムです。

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

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

	vector<char> st;
	for (int i = 0; i < (int)s.length(); ++i) {
		if (s[i] == ')') {
			if ((st.size() > 0) && (st.back() == '(')) {
				st.pop_back();
			} else {
				st.push_back(s[i]);
			}
		} else if (s[i] == ']') {
			if ((st.size() > 0) && (st.back() == '[')) {
				st.pop_back();
			} else {
				st.push_back(s[i]);
			}
		} else if (s[i] == '>') {
			if ((st.size() > 0) && (st.back() == '<')) {
				st.pop_back();
			} else {
				st.push_back(s[i]);
			}
		} else {
			st.push_back(s[i]);
		}
	}

	if (st.size() == 0) {
		cout << "Yes" << endl;
	} else {
		cout << "No" << endl;
	}

	return 0;
}

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

Python プログラム例(ABC394D)

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

"""AtCoder Beginner Contest 394 D"""
s = input()

st = []
for ch in s:
    if ch == ')':
        if len(st) > 0 and st[-1] == '(':
            st.pop()
        else:
            st.append(ch)
    elif ch == ']':
        if len(st) > 0 and st[-1] == '[':
            st.pop()
        else:
            st.append(ch)
    elif ch == '>':
        if len(st) > 0 and st[-1] == '<':
            st.pop()
        else:
            st.append(ch)
    else:
        st.append(ch)

print("Yes" if len(st) == 0 else "No")

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

最後に

ABC064D問題解説記事)は少し難しいですが、似たテクニックを使います。

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

COMMENT

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

CAPTCHA