AtCoder上にある問題のうち、AtCoder Problemsでdiff 800以上と判定されているものを順番に解いていく企画。
基本的な考え方は全てコード中のコメントに入れてあるので、参照のこと。
出典:
dwangoプログラミングコンテスト B – ニコニコ文字列
真面目に実装していくと、意外と面倒くさい問題。
def main():
S = input()+'0'
seq = []
buffer = ''
for c in S:
if c == '2' and not buffer.endswith('2'):
buffer += '2'
elif c == '5' and buffer.endswith('2'):
buffer += '5'
else:
if len(buffer) >= 2:
seq.append(len(buffer)//2)
if c == '2':
buffer = '2'
else:
buffer = ''
result = 0
for n in seq:
result += (n + 1) * n // 2
print(result)
main()
もう少し楽をしたい場合、文字列置換や正規表現を利用して、いろいろとやり方がある。いろいろとやってみたが、実はPython3においては、string.replace()後、split()を利用する方法が、楽な割に最速に近かった。
関連