蛇行パターンでマトリックスを印刷する方法:C++, Java, Pythonでの実装
この記事では、与えられたn x nのマトリックスを蛇行パターンで印刷する方法を解説します。これは、多くのプログラミング面接で問われる一般的な問題です。この記事では、C++, Java, Pythonを使った実装例を紹介し、時間計算量と空間計算量についても説明します。
蛇行パターンでマトリックスを印刷する方法:C++, Java, Pythonでの実装
この記事では、与えられたn x nのマトリックスを蛇行パターンで印刷する方法を解説します。これは、多くのプログラミング面接で問われる一般的な問題です。この記事では、C++, Java, Pythonを使った実装例を紹介し、時間計算量と空間計算量についても説明します。
蛇行パターンとは?
蛇行パターンとは、マトリックスの要素を行ごとに交互の方向で印刷するパターンです。偶数行は左から右へ、奇数行は右から左へ印刷します。
アルゴリズム
蛇行パターンでマトリックスを印刷するアルゴリズムは以下の通りです。
- すべての行を走査します。
- 各行について、それが偶数行であるか奇数行であるかをチェックします。
- 偶数行の場合は、左から右へ印刷します。
- 奇数行の場合は、右から左へ印刷します。
実装例
以下に、C++, Java, Pythonでの実装例を示します。
C++
#include <iostream>
#define M 4
#define N 4
using namespace std;
void print(int mat[M][N]) {
// すべての行を走査
for (int i = 0; i < M; i++) {
// 現在の行が偶数かどうか
if (i % 2 == 0) {
// 左から右へ印刷
for (int j = 0; j < N; j++)
cout << mat[i][j] << " ";
}
// 現在の行が奇数かどうか
else {
// 右から左へ印刷
for (int j = N - 1; j >= 0; j--)
cout << mat[i][j] << " ";
}
}
}
int main() {
int mat[M][N] = { { 10, 20, 30, 40 },
{ 15, 25, 35, 45 },
{ 27, 29, 37, 48 },
{ 32, 33, 39, 50 } };
print(mat);
return 0;
}
Java
import java.util.*;
class GfG {
static void print(int [][] mat) {
// すべての行を走査
for (int i = 0; i < mat.length; i++) {
// 現在の行が偶数かどうか
if (i % 2 == 0) {
// 左から右へ印刷
for (int j = 0; j < mat[0].length; j++)
System.out.print(mat[i][j] + " ");
}
// 現在の行が奇数かどうか
else {
// 右から左へ印刷
for (int j = mat[0].length - 1; j >= 0; j--)
System.out.print(mat[i][j] + " ");
}
}
}
public static void main(String[] args) {
int mat[][] = new int [][] { { 10, 20, 30, 40 },
{ 15, 25, 35, 45 },
{ 27, 29, 37, 48 },
{ 32, 33, 39, 50 } };
print(mat);
}
}
Python
# Python 3 program to print
# matrix in snake order
M = 4
N = 4
def printf(mat):
global M, N
# Traverse through all rows
for i in range(M):
# If current row is
# even, print from
# left to right
if i % 2 == 0:
for j in range(N):
print(str(mat[i][j]),
end = " ")
# If current row is
# odd, print from
# right to left
else:
for j in range(N - 1, - 1, - 1):
print(str(mat[i][j]),
end = " ")
# Driver code
mat = [[10, 20, 30, 40],
[15, 25, 35, 45],
[27, 29, 37, 48],
[32, 33, 39, 50]]
printf(mat)
時間計算量と空間計算量
このアルゴリズムの時間計算量はO(N x M)です。これは、マトリックスのすべての要素を走査する必要があるためです。
このアルゴリズムの空間計算量はO(1)です。これは、追加のメモリを使用しないためです。
まとめ
この記事では、与えられたn x nマトリックスを蛇行パターンで印刷する方法を解説しました。これは、面接でよく問われる問題なので、理解しておくことをお勧めします。この記事が、あなたのプログラミングスキルを向上させるのに役立つことを願っています。