考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC019-B - 高橋くんと文字列圧縮 を解く

ABC019-B - 高橋くんと文字列圧縮

 

与えられた文字列が

"aabbbaad" なら "a2b3a2d1" に、

"aabbbbbbbbbbbbxyza" なら "a2b12x1y1z1a1" のように

変換する問題

 

前から文字を数えていって

違う文字になったらその都度変換・接続していけばいい感じかな

 

以下は処理のイメージ

 

  ['',0] aabbbaad ''

→ ['',0] aabbbaad ''

→ ['a',1] aabbbaad ''

→ ['a',2] aabbbaad ''

→ ['a',2] aabbbaad ''

→ ['b',1] aabbbaad 'a2'

(中略)

→ ['d',1] aabbbaad 'a2b3a2d1'

 

提出したコード

# 入力
s=input()

# リスト
l=['',0]

# 出力文字列
a=''

for x in s:
  if l[0]=='':
    l[0]=x
    l[1]=1
  elif l[0]!=x:
    a+=l[0]+str(l[1])
    l[0]=x
    l[1]=1
  else:
    l[1]+=1
# 最後の文字と文字数も加算する
a+=l[0]+str(l[1])

# 出力
print(a)
 
リストを使って、変換を行う区切りを判断してみた
文字列を記憶する変数と、連続回数を記憶する変数を用意してもいいと思う
 
最後の文字だけは後ろに文字が続かないため
ループ処理が終わった後に後ろに繋げてあげる必要があるので注意

 

提出結果はACでした