LoginSignup
21
18

More than 3 years have passed since last update.

【Python】行列の90度右回転、90度左回転、180度回転【AtCoder】

Last updated at Posted at 2020-04-18

行列の回転のやりかたで、感動したことがあったので記事にしてみる。
この知識を、今後応用できるかは謎w

行列の90度右回転!! ABC036B

いろんな解き方があると思うけど、俺がはじめにACをゲットした時のコードがこちら。
ノートと紙で一生懸命、インデックスをどうすればうまくいくかなぁ・・・
と考えながらやった。

test.py
def I(): return int(input())
N = I()
S = [input() for _ in range(N)]
ans =[['']*N for _ in range(N)]
for i in range(N):
    for j in range(N):
        ans[j][N-1-i] = S[i][j]
for x in ans:
    print(*x,sep='')

つよい人のコードをみて、びっくり!感動!
90度右回転は、
①上下逆にさせた後、
②転置
すればいいんだって!!!

IMG_3975.JPG

この考えを参考にしたコードがこちら!
Sは2次元配列なので、S[::-1]で上下逆にできる!
転置については、わからなければ、
「転置 zip python」とかでググってください(難しくない)!

test.py
def I(): return int(input())
N = I()
S = [input() for _ in range(N)]
for x in zip(*S[::-1]):
    print(*x,sep='')

ACになった!
すごい!

行列の90度左回転!!

90度右回転と逆で、
90度左回転は、
①転置して、
②上下逆
にすればよさそう!!!

test.py
def I(): return int(input())
N = I()
S = [input() for _ in range(N)]
T_S = list(zip(*S))
for x in T_S[::-1]:
    print(*x,sep='')

本当に90度左回転になってる・・・?
スクリーンショット 2020-04-18 21.44.36.png

90度左回転になってる!!!!!!
すごい!

行列の180度回転!! ABC004B

180度回転は、
①左右逆
②上下逆
にすればよさそう!!!

test.py
def LS(): return list(input().split())
A = [LS()[::-1] for _ in range(4)]
for x in A[::-1]:
    print(*x,sep=' ')

入力時に、LS()[::-1]で左右逆にしちゃう!
ACになった!
感動しました〜

おわり!

21
18
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
21
18