주요 2차원 패턴
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 13번째.
일부 2차원 배열 연산은 매우 자주 나타나서 이름을 통해 알아둘 가치가 있습니다.
모든 셀 합산하기: 그리드를 1차원 배열로 평탄화하고 sum을 호출합니다:
grid = [[1, 2], [3, 4]]
puts grid.flatten.sum # 10주 대각선: 행 인덱스와 열 인덱스가 같은 셀 (matrix[i][i]):
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
(0...matrix.length).each do |i|
puts matrix[i][i]
end
# 1, 5, 9전치(Transpose): Ruby에는 이 기능이 내장되어 있습니다. 행이 열이 되고 그 반대도 마찬가지입니다:
matrix.transpose
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]이것들의 이름을 알고 있으면 동일한 중첩 루프를 반복해서 작성하는 수고를 덜 수 있습니다.
챌린지
쉬움정사각형 matrix (n × n)가 주어집니다. 이론의 패턴에서 파생된 세 줄을 출력하세요:
Anti-diagonal sum: <n>,r + c == matrix.length - 1인 셀들의 합계Column sums: [...], 각 열의 합계. 힌트: 먼저 transpose하고, 각 행을 그 합계로 map한 다음,inspect를 사용하세요Symmetric: true또는false: 행렬이 자신의 transpose와 같습니까?
기본 행렬에 대한 출력은 다음과 같습니다:
Anti-diagonal sum: 15
Column sums: [12, 15, 18]
Symmetric: false치트 시트
Ruby에서 흔히 사용되는 2차원 배열 연산:
모든 셀의 합계 — 평탄화(flatten) 후 합계 구하기:
grid.flatten.sum주 대각선(Main diagonal) — 행 인덱스와 열 인덱스가 같은 셀 (matrix[i][i]):
(0...matrix.length).each { |i| puts matrix[i][i] }
# i == 0: matrix[0][0], i == 1: matrix[1][1], ...부 대각선(Anti-diagonal) — r + c == matrix.length - 1인 셀:
(0...matrix.length).each { |i| puts matrix[i][matrix.length - 1 - i] }전치(Transpose) — 행과 열을 바꾸기:
matrix.transpose
# [[1,4,7],[2,5,8],[3,6,9]]열 합계(Column sums) — 먼저 전치한 후, 각 행의 합계 구하기:
matrix.transpose.map(&:sum) # [col0_sum, col1_sum, ...]대칭 확인(Check symmetry) — 행렬과 그 전치 행렬을 비교:
matrix == matrix.transpose # true or false직접 해보기
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# TODO: 역대각선 합, transpose를 통한 열의 합, 대칭 확인
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.