본문 바로가기
TIL - 프로그래밍/개념, 설정

[Python] 2차원 배열 - 순회, 전치행렬

by chaemj97 2022. 2. 20.
728x90
  • 지그재그 순회
# 짝수 행은 왼쪽방향으로 : i%2 == 0 -> j
# 홀수 행은 오른쪽방향으로 : i%2 == 1 -> m-1-j

# i : 행의 좌표
# j : 열의 좌표
for i in range(n):
    for j in range(m):        
        arr[i][j + (m-1-2*j)*(i%2)]

 

  • 2차 배열의 한 좌표에서 4방향의 인접 배열의 요소를 탐색하는 방법

    ( 각 요소에 대해서 그 요소와 이웃한 요소와의 차의 절댓값의 총합을 구하시오.)

# arr : 5*5 배열
arr = [[5, 6, 24, 25, 10], [6, 18, 9, 16, 11], [3, 11, 20, 19, 16],
       [14, 7, 19, 24, 25], [25, 16, 12, 22, 24]]
# dr : 행, dc : 열
# 시계 방향 -> 오,하,왼,상
dr = [0, 1, 0, -1]
dc = [1, 0, -1, 0]

sum_v = 0
for i in range(len(arr)):
    for j in range(len(arr[0])):
        for k in range(4):
            r = i + dr[k]
            c = j + dc[k]
            # 인덱스가 유효할 때
            if 0 <= r < len(arr) and 0 <= c < len(arr[0]):
                t = arr[i][j] - arr[r][c]
                # 차가 양수면 그대로 더하고, 음수면 - 붙이고 더하기
                if t >= 0:
                    sum_v += t
                else:
                    sum_v -= t                    
print(sum_v)

 

  • 전치 행렬

1.

# i : 행의 좌표
# j : 열의 좌표
arr = [[1,2,3],[4,5,6],[7,8,9]]
# 목표
# arr^T = [[1,4,7],[2,5,8],[3,6,9]]

for i in range(len(arr)):
    for j in range(len(arr[0])):
        if i < j:
            arr[i][j], arr[j][i] = arr[j][i], arr[i][j]
print(arr)

2.

arr^T = list(map(list,zip(*arr)))
728x90
반응형

댓글