キーワード
AtCoder Beginner Contest 380, split
問題
いろはちゃんは長さ
N (
N≥1 ) の正整数列
A=(A
1
,A
2
,…,A
N
) を持っています。
いろはちゃんは
A を使って、次のように文字列
S を生成しました。
S= | から始める。
i=1,2,…,N の順に、次の操作を行う。
S の末尾に - を
A
i
個追加する。
その後、
S の末尾に | を
1 個追加する。
生成された文字列
S が与えられるので、正整数列
A を復元してください。
制約
S は問題文中の方法で生成された長さ
3 以上
100 以下の文字列
A は長さ
1 以上の正整数列
入力
入力は以下の形式で標準入力から与えられる。
S
出力
答えを以下の形式で、
1 行に空白区切りで出力せよ。
A
1
A
2
…
A
N
入力例 1
Copy
|---|-|----|-|-----|
出力例 1
Copy
3 1 4 1 5
S= |---|-|----|-|-----| が生成されるような
A は
(3,1,4,1,5) です。
入力例 2
|----------|
出力例 2
10
入力例 3
|-|-|-|------|
出力例 3
1 1 1 6
アルゴリズム
- Sを受け取る
- Sを"|"で分割する。|と|の間の"-"だけになる
- 最初と最後に余計なやつがいるので、それを削除する
- それぞれの"-"の数を数え、それを別のリスト(answer)に格納する
- 表示形式に合わせて、answerを表示する。
回答
S = input()
l = S.split('|')
l = l[1:-1]
answer = []
for i in range(len(l)):
answer.append(len(l[i]))
print(" ".join(map(str, answer)))
参考
備考
- また表示形式を間違えた。
-
l = l[1:-1]
のゴリ押し感がある、汎用性が低い。 - あと単純に次の日に反省を書いているので大部分が忘れている。気づきはすぐにメモする。
- 他の人を見る限り、ぱっと見同じようなアルゴリズムになってる。というよりおそらく他の人のアルゴリズムのコードは読めないようになっている。