SWEA()/Intermediate_Learn

[SWEA]파이썬 SW문제해결 기본 - LIST 2 : 2차원 List (2/2)

코딩의행복 2021. 11. 10. 10:00

파이썬 SW문제해결 기본 - LIST 2

01 2차원 List

(2/2)


이미지를 클릭하시면 SW Expert Academy의 해당 강좌로 이동합니다

※이 글은 2편 중 2편입니다. 전편(1편)을 먼저 확인하는 것을 권장합니다.※

[SWEA]파이썬 SW문제해결 기본 - LIST 2 : 2차원 List (1/2)

 

[SWEA]파이썬 SW문제해결 기본 - LIST 2 : 2차원 List (1/2)

파이썬 SW문제해결 기본 - LIST 2 01 2차원 List (1/2) 01. 2차원 List 1️⃣ 2차원 List 구조 ◾2차원 List 구조 1) 1차원 List를 묶어놓은 List(즉, List를 요소로 가지는 List이다.) 2) 2차원 이상의 다차원 L..

taewow.tistory.com

 

3) 지그재그 순회 - List의 행을 좌우로 조사하는 방법

지그재그 순회

#지그재그 조회
arr = [[0,1,2,3], [4,5,6,7], [8,9,10,11]]

n = len(arr)        #행의 개수
m = len(arr[0])     #열의 개수

for i in range(len(arr)):    #j : 열의 좌표
    for j in range(len(arr[0])):    #i : 행의 좌표
        print(arr[i][j+(m-1-2*j)*(i%2)])    #필요한 연산 수행

출력 : 0 1 2 3 7 6 5 4 8 9 10 11


6️⃣ 델타를 이용한 2차 List 탐색

◾ 델타를 이용한 2차 List 탐색

1) 2차 List의 한 좌표에서 네 방향의 인접 List 요소를 탐색할 때 사용하는 방법이다.

2) 델타 값은 한 좌표에서 네 방향의 좌표와 x, y의 차이를 저장한 List로 구현한다.

3) 델타 값을 이용하여 특정 원소의 상하좌우에 위치한 원소에 접근할 수 있다.

📌 2차원 List의 가장자리 원소들은 상하좌우 네 방향에 원소가 존재하지 않을 경우가 있으므로, Index를 체크하거나 Index 범위를 제한해야 한다.

#델타를 이용한 상하좌우 탐색
#arr[0 ~ n-1][0 ~ n-1]    #크기 n의 2차원 List

#상, 하, 좌, 우
dx = [0,0,-1,1]
dy = [-1,1,0,0]

for x in range(len(arr)):
    for y in range(len(arr[x])):
        for i in range(4):
            testX = x + dx[i]
            testY = y + dy[i]
            print(arr[testX][testY])

7️⃣ 전치 행렬

◾ 전치 행렬 : 행과 열의 값이 반대인 행렬을 의미한다.

전치 행렬

#전치 행렬
arr = [[0,1,2],[3,4,5],[6,7,8]]

for i in range(len(arr)):            #i : 행의 좌표
    for j in range(len(arr[0])):     #j : 열의 좌표
        if i<j:
            arr[i][j], arr[j][i] = arr[j][i], arr[i][j]

📌 모든 좌표에 대해 행과 열의 값을 바꾸게 되면 본래의 모습으로 되돌아오기 때문에 이를 주의해야 한다.


◾ zip() 함수를 이용한 전치행렬

📍 zip(iterable*) : 동일한 개수로 이루어진 자료형들을 묶어 주는 역할을 하는 함수

#zip 함수 예시

alpha = ['a', 'b', 'c']
index = [1, 2, 3]

alpha_index = list(zip(alpha, index))
print(alpha_index)

출력 : [('a', 1), ('b', 2), ('c', 3)]

 

#zip 함수를 이용한 전치행렬

arr = [[1,2,3], [4,5,6], [7,8,9]]
print(list(zip(*arr)))

출력 : [(1,4,7), (2,5,8), (3,6,9)]

 

2차원 리스트는 행렬의 표현, 회로의 표현 등에서 굉장히 많이 활용되는 구조이다. 따라서 당연하게도 2차원 리스트의 검색, 순회, 조작 등 또한 매우 다양하게 활용된다. 2차원 리스트를 다룬 두 편의 글은 자주 열람하며 능숙하게 활용할 수준이 되도록 노력해야겠다.