1
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?

初めてAtCoderに挑戦

Posted at

AtCoderに初めて挑戦しました。

参加したコンテストはAtCoder Beginner Contest 430です。

Aは10分くらいで解けたのですが、Bから全然わかりませんでした。正直なところifforについて知識はあるけどいざ実践となるとわけがわからなくなりますね。それは練習あるのみとして、python言語の関数や型には私の知らないことがまだまだあるようです。それはそうですよね(笑)

今回のBは2Dスライディングウィンドウの問題でした。

以下はBについての解説にあったpythonコードです。

N,M=map(int,input().split())
S=[input() for _ in range(N)]

grid_set=set()
for i in range(N-M+1):
  for j in range(N-M+1):
    grid = tuple(S[ii][j:j+M] for ii in range(i,i+M))
    grid_set.add(grid)

print(len(grid_set))

めっちゃシンプルで驚きました。python言語ってすごいですね。

効率よくリストで管理し、for i in range(...)for j in range(...)という2重のforループで行と列のスライドを行い
S[ii][j:j+M] for ii in range(i,i+M)
で小さなまとまりを切り出しているようです。

私は入力されたstr型をリストに入れて管理しようとしたため、入力部分だけでかなり複雑になってしまいました。

N,M = map(int, input().split())
def make_boxs(N,M):
    s_box = ["a","b","c","d","e","f","g","h","i","j"]
    b_box = list()
    for n in range(N):
        s_box[n] = list(input())
        b_box.append(s_box[n])
    return b_box
b_box = make_boxs(N,M)

解説では内包表記を使うことでinputの際に一行でコードを書くことができています。
それと、setは順番を保持しませんが、tupleをsetに入れることで切り出したまとまりを順番を変えることなく種類数を求めることができるようです。listをsetに入れることはできないので注意が必要です。

一か月で色々学んだのでいつ、どんな時に、何を使えばいいかもっと勉強しないといけませんね。

1
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
1
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?