ホーム AtCoder ABC 237 B - 行列の転置
記事
キャンセル

AtCoder ABC 237 B - 行列の転置

問題: AtCoder ABC 237 B — 行列の転置 · English · 한국어

H 行 W 列の行列 A が与えられるので、その転置行列 B を出力します。転置後の行列は W 行 H 列で、各要素の行番号と列番号を入れ替えます。つまり、すべての 0 <= i < H、0 <= j < W について B[j][i] = A[i][j] とします。正方行列とは限らないため、出力は W 行で各行に H 個の値を並べます。この方法なら、行や列が 1 つの場合もそのまま扱えます。

制約は 1 <= H, W <= 100 と小さいため、各要素を転置後の位置に一度ずつコピーすれば十分です。時間計算量と空間計算量はいずれも O(HW) です。コードでは行列を読み込み、出力行ごとに値の間へ空白を入れ、各行の末尾で改行します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int h = Integer.parseInt(st.nextToken());
        int w = Integer.parseInt(st.nextToken());
        int[][] a = new int[h][w];

        for (int i = 0; i < h; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < w; j++) {
                a[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        StringBuilder out = new StringBuilder();
        for (int j = 0; j < w; j++) {
            for (int i = 0; i < h; i++) {
                if (i > 0) out.append(' ');
                out.append(a[i][j]);
            }
            out.append('\n');
        }
        System.out.print(out);
    }
}
この記事は著者により CC BY 4.0 ライセンスで公開されています。