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 でした。ABC C問題として、簡単な問題です。

解答案

レジの操作から、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」と判定されました。

    最後に

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

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

    COMMENT

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

    CAPTCHA