AtCoder

ABC282 C問題(String Delimiter)を解く

AtCoder_ABC282_C

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

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

C問題 String Delimiter(Difficulty : 104)

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

ABC282 C問題 String Delimiter

条件に従い、文字列の操作を行う問題です。AtCoder Problems による Difficulty は、104 でした。ABC C問題としては、解きやすい問題です。

解答案

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

  • 自然数 N と文字列 S を読み込む。
  • ” ” で囲まれた文字列の内か、外かを判断する。
    • 文字列の外にある、’,’ を ‘.’ に変換する。

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

文字列の内にあるか、外にあるかをフラグ in_string で管理します。文字列の外にある、コンマをピリオドに変換します。

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


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

	bool in_string = false;

	for (int i = 0; i < n; ++i) {
		if (s[i] == '"') {
			in_string = !in_string;
		}
		if (!in_string &&(s[i] == ',')) {
			s[i] = '.';
		}
	}

	cout << s << endl;

	return 0;
}

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

Python プログラム例(ABC282C)

Python でも同じように書きました。

"""AtCoder Beginner Contest 282 C"""
n = int(input())
s = input()
result = ""

in_string = False
for i in range(len(s)):
    if s[i] == '"':
        in_string = not in_string
    if not in_string and s[i] == ',':
        result += '.'
    else:
        result += s[i]

print(result)

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

最後に

特定のアルゴリズムを意識することなく、求められていることを実装する問題です。分かりにくいと感じたら、擬似コードを書くなどして、頭になじませるのが良いと思います。

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

COMMENT

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

CAPTCHA