ABC380 B問題の解説(Python)

はじめに

この記事では、ABC380のB問題を解説していきます。

ABC(AtCoder Beginner Contest)とは、AtCoderが開催している、競技プログラミングコンテストです。

ABC380 B – Hurdle Parsing

問題

問題

長さ \(N\) の正整数列 \(A=(A_1,A_2,…,A_N)\)  を持っています。
正整数列 \(A\) から、次のように文字列 \(S\) を生成しました。

  • \(S\) = “|” から始める。
  • \(i=1,2,…,N\) の順に、次の操作を行う。
    • \(S\) の末尾に “-” を \(A_i\) 個追加する。
    • その後、\(S\) の末尾に “|” を 1 個追加する。

生成された文字列 \(S\) が与えられるので、正整数列 \(A\) を復元してください。

制約

  • \(3 \leqq len(S) \leqq 100\)

思考の筋道

“|” で区切られた区間内に、”-” がいくつあるかを数える問題です。

区切り文字を “|” としてsplit関数を適用しましょう。split関数とは、ある文字列を指定の区切り文字で区切った結果のリストを返す関数です。

S = “|—|-|—-|-|—–|”
区切り文字を”|”としてsplit関数を適用すると
[“”, “—“, “-“, “—-“, “-“, “—–“, “”] という結果が得られます。

さて、リストの先頭と末尾の “” は不要ですので、それ以外の要素の文字数を出力しましょう。

split関数を使うと楽な問題は、前回のABC379-Bでも出題されましたね。

コード

S = input()

l = S.split("|")
ans = []

for i in range(1, len(l) - 1):
    ans.append(len(l[i]))

print(*ans)

以上、ABC380のB問題の解説でした!

では、またね。

リンク