AtCoder が提供しているABC(AtCoder Beginner Contest)304 のB問題をC++とPythonで解いてみました。ABC304は、2023年6月3日21:00に実施されました。
この回は、サーバ攻撃を受けてジャッジ遅れが大きく発生したため、unrated となりました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
B問題 Subscribers
問題はリンク先をご覧ください。
整数の問題ですが、文字列の問題として解く方が簡単です。AtCoder Problems による Difficulty は算出されていません。B問題としては、普通の難易度だと思います。
解答案
C++ プログラム例(ABC304B)
問題文に書いてある条件を実装して解くこともできますが、7つも分岐がありプログラムとしては、やや煩雑となります。
文字列の問題と捉えれば、以下となります。
- 数字のみからなる文字列が与えられる。
- 3文字目までの数字は変更しない。
- 3文字目以降の数字を ‘0’ に変更する。
文字列の問題と考えると、以下のようにすっきりとした C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
for (int i = 0; i < s.length(); ++i) {
if (i >= 3) {
s[i] = '0';
}
}
cout << s << endl;
return 0;
}
AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC304B)
Python は、文字列の文字を変更することができないため、解答用の文字列 result を用意して、そこに文字を追加していきます。
"""AtCoder Beginner Contest 304 B"""
s = input()
result = ""
for i, ch in enumerate(s):
if i >= 3:
result += '0'
else:
result += ch
print(result)
こちらも「AC」と判定されました。
最後に
整数の問題と解くか、文字列の問題と解くかで難易度が異なる問題でした。
引き続き ABC の問題を紹介していきます。