SSAFY/Python문법 정리

[Python] 2차원 배열 과 부분집합

황성안 2021. 2. 15. 19:05
728x90

 

2차원 배열의 선언

1차원 list를 묶어놓은 list 이다.

2차원 이상 다차원 list는 차원에 따라 index를 선언

2차원 list의 선언 : 세로길이 + 가로길이

python 에서는 데이터 초기화를 통해 변수선언과 초기화가 가능하다.

 

arr = [[0,1,2,3,],[4,5,6,7]] - 24열의 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]]
 
= 0
= 1
= 3
 
#상하좌우
dr = [-1100]
dc = [00-11]
#8방향 탐색시
#추가
#상하좌우
drc = [[-10], [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
 
 
 
재료 = ["계란""치즈""떡"]
 
= 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배씩 높아지고 낮아지고

 

<< 연산자

728x90

'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