AtCoder が提供しているABC(AtCoder Beginner Contest)282 のC問題をC++とPythonで解いてみました。ABC282は、2022年12月17日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
C問題 String Delimiter(Difficulty : 104)
問題はリンク先をご覧ください。
条件に従い、文字列の操作を行う問題です。AtCoder Problems による Difficulty は、104 でした。
解答案
問題を解く方針を書きだします。
- 自然数 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」と判定されました。
最後に
特定のアルゴリズムを意識することなく、求められていることを実装する問題です。分かりにくいと感じたら、擬似コードを書くなどして、頭になじませるのが良いと思います。
引き続き ABC の問題を紹介していきます。