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?

paizaラーニング問題集「マップの判定・縦横」を解き、改善した話

Posted at

▼問題文のURL

▼改善の概要

[改善前]
マップの最初の行,最後の行,それ以外の行の3つに分け、さらに左端,右端,それ以外の3つに分けてコードを書きました。場合分け9つ(3×3)、コードは43行でした。

[改善後]
場合分け9つは冗長であったため、改善を行いました。結果、場合分けは上下左右の4つ、コードは23行で書くことができました。

  1. 左の場合は、任意のマップの座標(j,i)において、iが0またはi-1が#のとき、題意の条件を満たすと考えます。右の場合は、iがW-1またはi+1が#のとき、題意の条件を満たすと考えます。上下も同様に考えます。

  2. 上下左右すべて題意の条件を満たした場合は、マップの座標(j,i)を出力します。

▼改善前の私のコード

H,W = map(int,input().split())

A = [list(input()) for i in range(H)]

for j in range(H):
    for i in range(W):
        # マップの最初の行
        if j == 0:
            # 左端
            if i == 0:
                if A[j+1][i] == "#" and A[j][i+1] == "#":
                    print(j,i)
            # 右端
            elif i == W-1:
                # 省略
            # それ以外
            else:
                # 省略      
        # 最後の行
        elif j == H-1:
                # 省略
        # それ以外の行
        else:
                # 省略
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?