본문 바로가기
PROGRAMMING/PYTHON

[Python] 2차원 배열

by 안녕나는현서 2021. 8. 22.
728x90

2차원 배열

  • 1차원 list를 묶어놓은 list
  • 세로 길이(행의 개수) = N, 가로 길이(열의 개수) = M 일때 2차원 배열 만들기
arr = [[0] * M for _ in range(N)] 

# 아래와 같은 경우는 안됨!! 
# 모든 행이 같은 1차원 리스트를 참조하고 있기 때문 
arr = [[0]*M]*N

 

배열 순회

  • i : 행의 좌표, j : 열의 좌표
  • 행 우선 순회
    for i in range(len(Array)): 
    	for j in range(len(Array[i])): 
        	Array[i][j]​
  • 열 우선 순회
    for j in range(len(Array[0])): 
    	for i in range(len(Array)): 
        	Array[i][j]​
  • 지그재그 순회
    for i in range(len(Array)): 
    	for j in range(len(Array[i])): 
        	Array[i][j + (M-1-2*j) * (i%2)]​

 

델타를 이용한 2차원 배열 탐색

# N*M 배열
# 좌, 우, 상, 하 
di = [0, 0, -1, 1] 
dj = [-1, 1, 0, 0] 

for i in range(len(arr)): 
	for j in range(len(arr[x])): 
    	for k in range(4): 
        	test_i = i + di[k] 
            test_j = j + dj[k] 
            
            if 0<= test_i < N and 0 <= test_j < M: 
            	arr[test_i][test_j]

 

전치 행렬

  • 대각선 기준 대칭이 되게 자리를 바꿈
arr = [[1,2,3],[4,5,6],[7,8,9]] 

for i in range(3): 
	for j in range(3): 
    	# 모든 원소에 대해서 바꾸는 작업을 진행하면 2번 반복하여 원래 자리로 돌아오게 되므로 
    	# 대각선을 기준으로 위나 아래에서 한 번만 바꾸는 작업을 진행 
    	if i < j: arr[i][j], arr[j][i] = arr[j][i], arr[i][j]

 

부분집합 (Subset)

  1. 부분집합의 수
    • 집합의 원소가 n개일 때, 공집합을 포함한 부분집합의 수는 2^n개
    • 각 원소를 부분집합에 포함 시키거나 포함 시키지 않는 2가지 경우를 모든 원소에 적용한 경우의 수
  2. 각 원소가 부분집합에 포함되었는지를 loop 이용하여 확인하고 부분집합 생성
    bit = [0,0,0,0] 
    
    for i in range(2): 
    	bit[0] = i 
        for j in range(2): 
        	bit[1] = j 
            for k in range(2): 
            	bit[2] = k 
                for l in range(2): 
                	bit[3] = l 
                    print(bit)​
  3. 비트 연산자 사용
    arr = [3,6,7,1,5,4] 
    n = len(arr) 
    
    for i in range(1<<n):     # 1<<n : 부분 집합 개수(1=2^0 -> 비트 단위로 n이동 -> 2^n) 
    	for j in range(n):    # 원소의 수만큼 비트를 비교 
        	if i & (1<<j):    # i의 j번째 비트가 1이면 j번째 원소 출력 
            	print(arr[j], end=', ') 
            print() 
        print()​
  4. itertools 모듈 사용
    from itertools import combinations 
    
    arr = [1, 2, 3, 4] 
    n = len(arr) 
    
    for r in range(n+1) : 
    	for combo in combinations(arr, r): 
        	print(combo) 
        print()​
728x90

'PROGRAMMING > PYTHON' 카테고리의 다른 글

[Python] 진수 변환  (0) 2021.10.03
[Python] 비트 연산자  (0) 2021.08.22
[Python] packing과 unpacking  (0) 2021.08.16
[Python] input() vs sys.stdin.readline()  (0) 2021.08.16
[Python] 객체 지향 프로그래밍(OOP)  (0) 2021.07.30

댓글