Menu
Coddy logo textTech

주요 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]]

이것들의 이름을 알고 있으면 동일한 중첩 루프를 반복해서 작성하는 수고를 덜 수 있습니다.

challenge icon

챌린지

쉬움

정사각형 matrix (n × n)가 주어집니다. 이론의 패턴에서 파생된 세 줄을 출력하세요:

  1. Anti-diagonal sum: <n>, r + c == matrix.length - 1인 셀들의 합계
  2. Column sums: [...], 각 열의 합계. 힌트: 먼저 transpose하고, 각 행을 그 합계로 map한 다음, inspect를 사용하세요
  3. 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를 통한 열의 합, 대칭 확인
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨