← 一覧へ戻る

ランレングス圧縮 LV3 ・ 30点

問題

英大文字だけからなる文字列 S が与えられます。S をランレングス圧縮してください。ランレングス圧縮とは、同じ文字が連続する部分を「文字+連続した個数」で表す方法です。

例えば AAABBC は、A が 3 個、B が 2 個、C が 1 個続くので A3B2C1 と表します。

制約

入力

入力は以下の形式で標準入力から与えられます。

S

出力

ランレングス圧縮した文字列を 1 行に出力してください。各かたまりについて「文字」「連続する個数(10 進数)」をこの順に、区切りなしで続けて書きます。

入出力例

入力出力
AAABBC
A3B2C1
ABCDE
A1B1C1D1E1

💡 学習アドバイス

「同じものがいくつ続くか」を数えながら進む、データ処理の基礎が詰まった問題です。FE(基本情報)の過去問にも登場するテーマです。

  1. 文字列を左から見ていく
  2. いまの文字と同じ文字が何個続くかを数える
  3. 「文字」と「個数」を出力する
  4. 数えたぶんだけ位置を飛ばして、また 2 に戻る

ポイントは「次に進む位置を、数えた個数のぶんだけ飛ばす」こと。1 文字ずつ戻ってしまうと二重に数えてしまいます。連続のかたまり(ラン)ごとにまとめて処理する感覚をつかみましょう。これができると、データ圧縮の考え方の入り口に立てます。

コーディング(ここで挑戦!)

下のエディタにコードを書き、「コンパイル・実行」で試し、「提出」で全テスト採点します。言語は C / C++ / Java から選べます。全テスト合格でこの問題はクリア(👑)です。

本番の編集・コンパイル・実行・採点は Exercode 上で行います。このページは予習・練習用です(実行は Wandbox の実コンパイラを利用)。