AtCoder

ABC283 C問題(Cash Register)を解く

AtCoder_ABC283_C

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

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

C問題 Cash Register(Difficulty : 88)

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

ABC283 C問題 Cash Register

制約がある文字列の長さを求める問題です。AtCoder Problems による Difficulty は、88 でした。

解答案

レジの操作から、00 を1文字とカウントする。それ以外の数字は、そのまま1文字とカウントすれば良いことが分かります。

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

  • 文字列 S を読み込む。
  • 文字列 S が “00” を何個含むかカウントする。
  • 文字列の長さから、”00″ の個数を引いて出力する。

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

方針に従い、プログラムしました。for 文の中で、ループカウンタ i の値をインクリメントしているのは、良くない作法ですが、今回は許容しました。

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

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

	int temp = 0;
	for (int i = 0; i < s.length(); ++i) {
		if ((s[i] == '0')&&(s[i + 1] == '0')) {
			++temp;
			++i;
		}
	}

	cout << s.length() - temp << endl;

	return 0;
}

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

Python プログラム例(ABC283C)

Python は、文字列を置換する replace メソッドを使いました。”00″ を “Z” という1文字に置換して、文字列の長さを求めました。

"""AtCoder Beginner Contest 283 C"""
s = input()
print(len(s.replace("00", "Z")))

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

最後に

一見、整数の処理をする問題と読み取れますが、実際は、文字列処理の問題でした。

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

COMMENT

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

CAPTCHA