766. Toeplitz Matrix
2026-04-09
Leetcode 766번 풀이
문제
풀이 1
아이디어
문제 그대로를 구현했다. 대각선이 모두 같은 원소로 이루어져 있는지 확인하기 위해, 0번째 행과 0번째 열을 시작점으로 하는 대각선을 각각 확인한다.
근데 이렇게 하니 루프를 2번 돌게 되어서 더 좋은 방법이 있겠다는 생각이 본능적으로 들었다.
코드
function isToeplitzMatrix(matrix: number[][]): boolean {
// 더 좋은 방법이 있을 것 같다...
const m = matrix.length;
const n = matrix[0].length;
// 0번째 행을 시작점으로 하는 대각선 확인하기
for (let col = 0; col < n; col++) {
let y = 1;
let x = col + 1;
while (y < m && x < n) {
if (matrix[y - 1][x - 1] !== matrix[y][x]) return false;
y++;
x++;
}
}
// 0번째 행을 시작점으로 하는 대각선 확인하기
for (let row = 1; row < m; row++) {
let y = row + 1;
let x = 1;
while (y < m && x < n) {
if (matrix[y - 1][x - 1] !== matrix[y][x]) return false;
y++;
x++;
}
}
return true;
}시간 / 공간 복잡도
- 시간 복잡도: O(M * N) — 행렬의 모든 원소를 순회
- 공간 복잡도: O(1)
풀이 2
아이디어
역시 더 간결한 방법이 있었다. 대각선이 모두 같은 원소인지를 확인하기 위해서 굳이 대각선 단위로 모두 비교할 필요는 없었다. 각 원소들이 자신의 오른쪽 아래 원소와 동일한지를 확인해주면 한번의 루프로도 충분히 검증이 가능하다. 루프를 두번 도는 것보다 가독성 측면에서도 좀 더 이해하기 쉬운 것 같다.
코드
function isToeplitzMatrix(matrix: number[][]): boolean {
const m = matrix.length;
const n = matrix[0].length;
// 각 원소를 오른쪽 아래의 이웃과만 비교한다.
for (let i = 0; i < m - 1; i++) {
for (let j = 0; j < n - 1; j++) {
if (matrix[i][j] !== matrix[i + 1][j + 1]) return false;
}
}
return true;
}시간 / 공간 복잡도
- 시간 복잡도: O(M * N) — 행렬의 모든 원소를 순회
- 공간 복잡도: O(1)