0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ruby と Perl と Java と Python で解く AtCoder ABC 047 C 正規表現

Last updated at Posted at 2020-04-30

はじめに

AtCoder Problems の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。

今回のお題

AtCoder Beginner Contest 047 C - 一次元リバーシ
Difficulty: 650

今回のテーマ、正規表現

Ruby

例えば、WWWWBBWBBB を W B でそれぞれまとめますと WBWB となり、3回で一色にできることが分かります。
こういう文字列の処理は正規表現を使用すると簡単に解けます。
*AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~で有名な C - 白昼夢 も正規表現ですとスッキリ*解けます。

ruby.rb
s = gets.chomp
s.gsub!(/W+/, "W")
s.gsub!(/B+/, "B")
puts s.size - 1

W+ は1文字以上の連続したW を表現しています。

Python

python.py
import re

s = input()
s = re.sub(r'W+', "W", s)
s = re.sub(r'B+', "B", s)
print(len(s) - 1)

Python で正規表現を使用する場合、import re が必要です。

Perl

perl.pl
chomp (my $s = <STDIN>);
$s =~ s/W+/W/g;
$s =~ s/B+/B/g;
print length($s) - 1, "\n";

Java

java.java
import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        sc.close();
        s = s.replaceAll("W+", "W");
        s = s.replaceAll("B+", "B");
        System.out.println(s.length() - 1);
    }
}
Ruby Python Perl Java
コード長 71 Byte 97 Byte 87 Byte 310 Byte
実行時間 36 ms 38 ms 21 ms 239 ms
メモリ 10076 KB 4468 KB 640 KB 35160 KB

まとめ

  • ABC 063 C をスッキリ解いた
  • Ruby に詳しくなった
  • Python に詳しくなった
  • Perl に詳しくなった
  • Java に詳しくなった

参照したサイト
pythonで、とっても便利な正規表現を!
Java での正規表現の使い方メモ
instance method String#gsub
ABC049C - 白昼夢を簡単に導く方法が知りたい(Golang)

0
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?