AtCoder

ABC304 B問題(Subscribers)を解く

AtCoder_ABC304_B

AtCoder が提供しているABC(AtCoder Beginner Contest)304 のB問題をC++とPythonで解いてみました。ABC304は、2023年6月3日21:00に実施されました。

この回は、サーバ攻撃を受けてジャッジ遅れが大きく発生したため、unrated となりました。

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

B問題 Subscribers

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

ABC304 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」と判定されました。

最後に

整数の問題と解くか、文字列の問題と解くかで難易度が異なる問題でした。

ABC304 について、引き続き問題を紹介していきます。

COMMENT

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

CAPTCHA