728x90
지날 글에서는 배열, 정렬, 그리디알고리즘에 대해 가볍게 알아보았다. 알고리즘 사이트들을 통해서 쉬운 문제부터 단계적으로 풀어보며 익숙해지고 있다.
오늘은 1차원 List를 묶어놓은 List인 2차원 배열에 대해 알아보자.
선언
- 2차원 이상의 다차원 List는 차원에 따라 Index를 선언
- 2차원 List의 선언: 세로길이(행의 개수), 가로 길이(열의 개수)를 필요로 함
- Python에서는 데이터 초기화를 통해 변수선언과 초기화가 가능함
arr = [[0,1,2,3],[4,5,6,7]] (2행 4열의 2차원 List)
N = int(input)
arr = [list(map(int, input().split()) for _ in range(N)]
배열 순회
- n X m 배열의 n*m개의 모든 원소를 빠짐없이 조사하는 방법
1. 행 우선 조회
# i행의 좌표
# j열의 좌표
for i in range(n):
for j in range(m):
Array[i][j] # 필요한 연산 수행
2. 열 우선 조회
# i행의 좌표
# j열의 좌표
for j in range(m):
for i in range(n):
Array[i][j] #필요한 연산 수행
3. 지그재그 순회
# i행의 좌표
# j열의 좌표
for i in range(n):
for j in range(m):
Array[i][j + (m-1-2*j) * (i%2)]
# 필요한 연산 수행
델타를 이용한 2차 배열 탐색
- 2차 배열의 한 좌표에서 4차방향의 인접 배열 요소를 탐색하는 방법
- 상하좌우 인덱스를 이용하는 것!
arr[0...N-1][0...N-1] # NxN 배열
di[] <- [0, 0, -1, 1] #상하좌우
dj[] <- [-1, 1, 0, 0]
for i : 1 -> N-1
for j : 1 -> N-1:
for k in range(4):
ni <- i + di[k]
nj <- j + dj[k]
if 0 <=ni<N and 0<=nj<N # 유효한 인덱스면
test(arr[ni][nj])
전치 행렬
#i : 행의 좌표, len(arr)
#j : 열의 좌표, len(arr[0])
arr = [[1,2,3,], [4,5,6], [7,8,9]] # 3*3 행렬
for i in range(3):
for j in range(3):
if i < j:
arr[i][j], arr[j][i] = arr[j][i], arr[i][j]
2차원 배열을 이용하여 인덱스를 잘 이용한다면 더 좋은 코드를 짤 수 있을거라 생각한다!!
하루에 하나씩이라도 풀어보며 다음 글에서는 부분집합에 대해서 알아보자!!
728x90
'CS > 자료구조' 카테고리의 다른 글
[자료구조] 큐(Queue) - 선형 큐, 원형 큐, 우선순위 큐 with Python (0) | 2022.09.09 |
---|---|
[자료구조] Stack with Python (0) | 2022.09.09 |
[자료구조]- 문자열 (자료형) (1) | 2022.09.09 |
[자료구조] 배열과 리스트 with Python (0) | 2022.09.09 |
[자료구조] 자료구조? (0) | 2022.09.09 |