質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

1503閲覧

ロジックサマナーの 圧縮(封印レベルC)の解き方(Python3)

Yuma_T

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/05/31 01:50

編集2021/05/31 09:21

ロジックサマナーの圧縮問題のPython3を使った解き方を教えてください。
お願いします。

ロジックサマナーとはプログラミングを学習できるサイトです。

問題文

あなたは大量の紙のデータを転送しようとしています。 そのままでは時間がかかるため、二値化した後に圧縮をして送る事にしました。 圧縮する方法は、データのうち連続する部分を連続回数に置換する事にしました。 今回は、先頭の色を黒色に固定するため、データの最初に 0 個の黒を挿入して圧縮します。 以下の入力例 1 の場合は、先頭の 0 個の黒と合わせて黒が 3 個、白が 5 個なので "3 5" となります。 https://paiza.s3.amazonaws.com/problem/img/poh10/img/logics_type_2001_0.png 白と黒の順番が逆になった入力例 2 では、最初に 0 個の黒が入るので "0 5 3" となります。 https://paiza.s3.amazonaws.com/problem/img/poh10/img/logics_type_2001_1.png このように入力されたデータを圧縮してください。 入力される値 入力は標準入力にて以下のフォーマットで与えられます。 S ・文字列 S が与えられます。 S は "w"(白), "b"(黒) の二つの文字によって構成されます。 ・入力は 1 行となり、末尾に改行が 1 つ入ります。 条件 すべてのテストケースにおいて、以下の条件をみたします。 ・1 ≦ ( S の長さ) ≦ 100 ・S には "w"(白) か "b"(黒) の文字しか含まれない 期待する出力 入力されたデータに対する圧縮した結果を半角スペース区切りで出力して下さい。 出力の最後に改行を入れ、余計な文字、空行を含んではいけません。 入力例1 入力 bbbwwwww 出力 3 5 入力例2 入力 wwwwwbbb 出力 0 5 3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/05/31 02:39

ロジックサマナーとは何でしょうか。 説明不足すぎて意味不明です
y_waiwai

2021/05/31 03:00

その説明を質問文を編集して追記しましょう また、その圧縮なるもののアルゴリズムの説明も追記しましょう
guest

回答1

0

これ、Paizaさんが主催(?)しているサイトですよね。

一応書いておきます。


そもそも心構えが出来ていない気がします。

プログラミングは『こう書けばいい』っていうものじゃなくて、

プログラムは魔法でもなんでもなく、人間が現実世界でやっていることを逐一指示されながら処理しているだけの代物である』です。

つまり、人間が現実世界でやっていることをシミュレーションしているだけです。

よって、『現実世界でならどうするかを考える』です。

今回の場合、プログラミングとかは置いといて、『現実世界で、手作業でやるならどうするか』を考えるのです。

問題文にある仕様に基づいて、たとえばホワイトボードかなんかに書かれている文字( b, w で構成されている) を問題文にあるような、 0 5 3 とかにするのです。

仕様として、『必ず黒(b) から始まる』ので、黒をカウントする。

"wwwwwbbb" であれば、

最初は b から始まる予定ですが、無いので 0 とする。

答え = { 0 }

そして、次に w を数える。

5つあるので 5 。

答え = { 0, 5 }

さらに b がまだ残っているので数える。

答え = { 0, 5, 3 }

と言う風に。

そして、必ず 黒 -> 白 -> 黒 -> 白 ... という構成になっている。

つまり、奇数と偶数の組み合わせに近い。

よって、奇数 = 黒, 偶数 = 白 と仮定。

それでは奇数とはなんでしょうか。
偶数とはなんでしょうか。

奇数よりも偶数の方がわかりやすいため、偶数を例に考える。

偶数とは『2で割り切れる数字』ですね。

よって、『2で割ったときの余りが0である』。

よって、『2で割ったときの余りが0なら偶数』と見なす。

偶数の反対は奇数。
よって偶数かどうかが分かればいける。

そして、『現在、なにを調べているか』(= 黒 or 白) をどっかに書いておけばいい。

……ということでこれらをPythonとかの言語で書き下せばいいだけです。

『カウントする』は、現実世界でならホワイトボードかなんかに正の字を書いていくとかでもいいですね。
でもプログラミングにはそんなものはないので、『変数』で代用。

変数でカウントしていく。

count = count + 1 とかみたいに。

でも初期値を指定しないと言語によってはめちゃくちゃな値になっていたりするので 0 で初期化する。

ただし、『かけていく』(掛け算) とかなら 初期値 = 0 だと値がおかしくなるので 1 とかみたいに値がちゃんとなるようにする。

『現在、何を調べているか』とかも変数で代用。

『偶数かどうか』みたいなものはif文で実装可能。(条件式はご自分で調べ、考えてみて)

投稿2021/06/01 09:16

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問