0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

プログラミングわからんケモノのABC394

Posted at

ABC394感想

4完の難易度が非常に低い回でしたね、下位層の人間からするとどれだけスピードを出せるかの勝負だったと思います。

A問題

要するに文字列に含まれる2の数は何文字か。って話です。
解法はいくらでもあると思いますが、雑に通しました。
ちなみにコンテスト開始に間に合わず、スマホから一度投稿したのですが、2を文字列にしておらず1ペナもらいましたが、これが致命傷でした。二度とやらない。

python abc394_a.py
l = list(input())

for i in l:
 print(2 if i == "2" else "", end="")

B問題

文字列を長さ順に結合しろって問題です。
文字列を長さ順に並び替えたものを結合させる以上の解説はいらないと思います。

python abc394_b.py
print("".join([s for s in sorted([input() for _ in range(int(input()))], key = lambda x: len(x))]))

C問題

文字列中にWAがなくなるまで、WAをACに変換しろって問題です。
流石に愚直にやるわけにもいかないので、ひと工夫入れましょう。

WAをACに変換することで、Aの手前にあるWは消えるものの、Aはそのまま残るため、WWAのようにWが続いていれば、WWA→WAC→ACCと変換することが出来ることが重要です。
要するにWAの形を見つけて、連続しているWをそのままCに変換し、Aの後ろに持ってきてやれば終わりです。

python abc394_c.py
import itertools as it

l = list(input())
d = [[a, len(list(b))] for a, b in it.groupby(l)]

ans = []
for a, b in zip(d, d[1:]):
  if a[0] == "W" and b[0] == "A":
    ans += ["AC"] + ["C"] * (a[1] - 1)
    b[1] -= 1
    
  else:
    ans += [a[0]] * a[1]
    
ans += [d[-1][0]] * d[-1][1]
print(*ans, sep="")

D問題

要するに() や {} のある計算式がちゃんと解けるようになっているか?を答える能力があるか聞かれている問題です。

手前から順に(などのカッコの始まりはストックにため、)などの閉じカッコはストック順にチェックをし、通ったらOK、駄目だったり、少なかったりしたらNG。
どっちかというとなんでそれで通るのかを説明する方が難しい気がしますね。

python abc394_d.py
import collections as cs

d = {")": "(", "]": "[", ">": "<"}
x = cs.deque()
for s in list(input()):
  if s not in d.keys():
    x.append(s)
    
  elif x and d[s] == x[-1]:
    x.pop()
    
  else:
    x = ["a"]
    
print("Yes" if not x else "No")
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?