考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC036-B - 回転 を解く

ABC036-B - 回転

 

N × N のマス目を90度右に倒すだけ

手動でやるなら極めて簡単な処理だ

しかしプログラムでやるとなるとどうしたものか…?

 

ここは座標を使って考えてみたいと思う

左上最初の文字がある場所を (0, 0) とし、その右隣を (0, 1)

左上の上から2番目の文字がある場所を (1, 0) のように表す

 

ここで、右に90度回転させたとき、各座標はどのように移動するのかを考える

入力例1 の 4 × 4 の場合で考えてみよう

 

90度回転させた結果

(0, 0), (0, 1), (0, 2), (0, 3) になる座標は元々どこにあった座標なのか?

答えは (3, 0), (2, 0), (1, 0), (0, 0) である

それでは、二行目にあたる (1, 0), (1, 1), (1, 2), (1, 3) の座標はどこからくるか?

それらは (3, 1), (2, 1), (1, 1), (0, 1) から来る

 

上記より、移動前のマス目の (x, y) 座標について、x は N-1, N-2, N-3 と降順にして

y は行と同じにすればよいことがわかる

コードに落とし込んだものを以下に示す

 

提出したコード

# 入力
N=int(input())

l=[]
for i in range(N):
  l.append(input())

for i in range(N):
  s=''
  for j in range(N)[::-1]:
    s+=l[j][i]
  print(s)

 

提出結果はACでした

 

今回は実験を何度か繰り返して書いたので

文章にすると分かり辛いものになってしまったように思う

 

解説スライドにはもっと分かり易いやり方が載っているので

そちらを参照した方がいいかもしれない

 

AtCoder Beginner Contest 036 解説