はじめに
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)