データ構造 〜 第1章 配列と文字列 問題1-6
世界で闘うプログラミング力を鍛える150問 トップIT企業のプログラマになるための本
- 作者: Gayle Laakmann McDowell
- 出版社/メーカー: マイナビ出版
- 発売日: 2012/11/13
- メディア: Kindle版
- この商品を含むブログ (3件) を見る
M✕Nの行列に描かれた、1つのピクセルが4バイト四方の画像を90度回転させる。
複素平面上で(x,y)を回転させると下記になる。
N×Nの正方形の座標(x,y)を1次元配列pに下記のように対応させる。
90度回転させるとは、この配列pを下記配列に変換することを意味する。
これでは原点中心に90度回転させることになるので、追加領域が必要となる。
追加領域なしにするには、90度回転させてから、Nだけ平行移動する必要がある。
それを考慮すると下記のようになる。
上記を踏まえて書いたコードが以下だが、どこかにバグが有る。現在考え中。
package solve; public class Solve { public static void main(String[] args) { if(args.length == 0){ System.out.println("正方形のサイズNを入力してください。"); return; } int N = Integer.parseInt(args[0]); String[] p1 = new String[N*N]; String[] p2 = new String[N*N]; int v = 0; for(int x=0; x<N; ++x){ for(int y=0; y<N; ++y){ p1[x+y*N] = (y%3==0 ? "○" : "×"); System.out.print(p1[x+y*N]); } System.out.println(""); } System.out.println(""); for(int x=0; x<N; ++x){ for(int y=0; y<N; ++y){ p2[-y+N-1+x*N] = p1[x+y*N]; System.out.print(p2[-y+N-1+x*N]); } System.out.println(""); } } }