行列の回転のやりかたで、感動したことがあったので記事にしてみる。
この知識を、今後応用できるかは謎w
いろんな解き方があると思うけど、俺がはじめに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度右回転は、
①上下逆にさせた後、
②転置
すればいいんだって!!!
この考えを参考にしたコードがこちら!
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度左回転になってる!!!!!!
すごい!
#行列の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になった!
感動しました〜
おわり!