2차원 배열의 선언
1차원 list를 묶어놓은 list 이다.
2차원 이상 다차원 list는 차원에 따라 index를 선언
2차원 list의 선언 : 세로길이 + 가로길이
python 에서는 데이터 초기화를 통해 변수선언과 초기화가 가능하다.
arr = [[0,1,2,3,],[4,5,6,7]] - 2행 4열의 2차원 list
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
ex)
arr[1][2] = 6
arr[2][1] = 인덱스 에러
보통 문제에서는 행과 열이 주어진다. 3, 4
입력은 아래와 같이 주어진다면
1 2 3 4
5 6 7 8
9 10 11 12
즉 행과 열, 2차원 값이 주어진다.
*꼭 길이가 같지않아도된다
ex )1234
123
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
arr = [[1,2,3,4],[5,6,7,]]
for i in arr:
print(i)
#실습==============================================================================
#크게 3가지로 나온다.
N,M = map(int, input().split()) #행과 열이 주어질때 공백단위로 인트를 받아준다.
arr = []
for i in range(N):
arr.append(list(map(int,input().split())))
for i in arr:
print(i)
#==============================================================================
arr = [0] * N
for i in range(N):
arr[i] = (list(map(int, input().split())))
for i in arr:
print(i)
#===========================================================================
N,M = map(int, input().split()) #행과 열이 주어질때 공백단위로 인트를 받아준다.
arr = [list(map(int,input().split())) for _ in range(N)] # 리스트 입력을 N번만큼 받아서 arr 리스트를 완성시키겠다.
# for 과 in 사이에는 i를 사용하여도된다. 다만 따로 변수를 안줘도되기때문에 _ 를 사용하였다
for i in arr:
print(i)
|
cs |
2차원 배열의 접근
배열 순회
n X m 배열의 n*m개의 모든 원소를 빠짐없이 조사하는 방법
행 우선 순회
#i 행의 좌표
#j 열의 좌표
#행이 가장 밖, 열이 안쪽
행 우선순회
for i range(len(Array)):
for j int 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[0])):
Array[i][j+(m-1-2*j)*(i%2)]
for
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
arr = [[1,2,3,4],
[5,6,7,8],
[9,11,12,13]
]
N= 3 # 행의 길이
M= 4 # 열의 길이
# 길이 뽑아내기
#len(arr) 행의 길이
#len(arr[0])열의 길이
#행 우선순회 방식
for i in range(N):
#print()
for j in range(M):
print(arr[i][j])# end= " "
#행 우선 순회를 역으로 돌아보자.
for i in range(N):
for j in range(M-1,-1,-1):
print(arr[i][j])
#열 우선 순회
for j in range(M):
for i in range(N):
print(arr[i][j])
#열 우선 순회를 역으로
for j in range(N-1,-1,-1):
for i in range(M):
print(arr[i][j])
#지그재그 순회
for i in range(N):
for j in range(M):
print([i][j+(M-1-2*j)*(i%2)])
|
cs |
델타를 이용한 2차 배열 탐색
ary[0 ... n-1][0... n-1]
dx[] < [-1,1,0,0] #dr, dc = 행, 열
dy[] < [0,0,-1,1]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
arr = [[1,2,3],
[4,5,6],
[7,8,9]]
r = 0
c = 1
N = 3
#상하좌우
dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]
#8방향 탐색시
#추가
#상하좌우
drc = [[-1, 0], [1,0], [0,-1],[0,1]]
for i in range(4):
nr = r + dr[i] #next R
nc = c + dc[i]
if nr < 0 or nr >= N or nc < 0 or nc >= N: continue # 이놈이 없으면 8을 소환해버림 ㅠㅠ
#if: 0 <= nr <N and 0 <= nc < N: continue
print(arr[nr][nc])
|
cs |
주의 : 파이썬에서 출력시에 조건문해줘야지 안그럼 엉뚱한 숫자를 소환함
전치 행렬
(종이접기 마냥)
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]
부분집합 합 문제
소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
bit = [0,0,0,0] #1차원 생성 4가지를 생성해야하기떄문
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) # *표시하면 [] , 가 사라집니당.
#i j k l 을 0000~ 1111 의 경우의 수를 보여줌
#2^3 2^2 2^1 2^0
재료 = ["계란", "치즈", "떡"]
N = 3
for i in range(i << N):
ans = ""
for j in range(N):
if i & (1<<j):
ans+= 재료[j] + " "
print(ans, "라면입니다.")
|
cs |
비트 연산자
& and 연산 둘다 참일때
| or 연산 하나라도 참일때 true
<< 피연산자의 비트 열을 왼쪽 이동
>> 오른쪽이동
*2배씩 높아지고 낮아지고
<< 연산자
'SSAFY > Python문법 정리' 카테고리의 다른 글
[Python] 형변환(atoi, itoa) 및 패턴 매칭 (2) | 2021.02.19 |
---|---|
[Python] 이진 탐색(feat. [SWEA]4839.이진탐색) (0) | 2021.02.17 |
[Python] 순차 검색 (0) | 2021.02.16 |
[Python] 기본 입출력 (0) | 2021.02.08 |
[Python] 배열 (0) | 2021.02.08 |