一般的な2次元配列パターン
CoddyのJavaジャーニー「ロジックとフロー」セクションの一部 — レッスン 8/59。
2D配列を扱う際、特定のパターンが頻繁に現れます。これらのパターンを認識することで、問題をより効率的に解決できるようになります。以下にいくつかの代表的なパターンを紹介します。
対角線のトラバース
行インデックスと列インデックスが等しい要素(matrix[i][i])にアクセスすると、対角線(Main diagonal)を取得できます。逆対角線(Anti-diagonal)の場合、行インデックスと列インデックスの和は配列のサイズ(size)引く 1 になります(matrix[i][size - 1 - i])。
例えば:
1 2 3
4 5 6
7 8 9メイン対角線(matrix[i][i])に沿ってトラバース: 1, 5, 9
反対角線(matrix[i][size - 1 - i])に沿ってトラバース: 3, 5, 7
境界の走査 (Border Traversal)
境界(border)要素を走査するには、一方のインデックスを一定(0 または size - 1)に保ちながら、もう一方のインデックスをループ処理します。
Top の境界にアクセスするには、行のインデックスを 0 に固定した状態で列をループ処理します。
例えば:
1 2 3 4
5 6 7 8
9 10 11 12外枠の要素: 1, 2, 3, 4, 8, 12, 11, 10, 9, 5 (6と7を除くすべて)
チャレンジ
簡単整数の正方2次元配列(matrix)を入力として受け取り、以下のパターンを出力する printPatterns という名前のメソッドを作成してください:
- Main Diagonal: 行インデックスと列インデックスが等しいすべての要素を出力します。
- Anti-Diagonal: 行インデックスと列インデックスの合計が
matrixのsizeマイナス 1 に等しいすべての要素を出力します。 - Borders:
matrixのTop、Bottom、Left、RightのBorderの要素を出力します。
出力は次のようになる必要があります:
Main Diagonal: 1 6 11 16
Anti-Diagonal: 4 7 10 13
Top Border: 1 2 3 4
Bottom Border: 13 14 15 16
Left Border: 1 5 9 13
Right Border: 4 8 12 16自分で試してみよう
// クラスの中にのみコードを書いてください。main() やこのクラスの外にコードを書かないでください。
class PrintPatterns {
public static void printPatterns(int[][] matrix) {
// ここにコードを書いてください
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。