Algorithm_03

Jingi·2024년 1월 31일

Python

목록 보기
12/32
post-thumbnail

배열


2차원 배열의 선언

  • 1차원 List를 묶어놓은 List
  • 2차원 이상의 다 차원 List는 차원에 따라 Index를 선언
  • 2차원 List의 선언 : 세로길이(행의 개수), 가로길이(열의 개수)
  • python 에서는 데이터 초기화를 통해 변수선언과 초기화가 가능함
  • arr = [[0,1,2,3][4,5,6,7]]
    0 | 1 | 2 | 3 |
    4 | 5 | 6 | 7 |
N = int(input())
arr = [list(map(int,input().split())) for _ in range(3)]
3
1 2 3
4 5 6
7 8 9

배열 순회

  • n X m 배열의 n*m개의 모든 원소를 빠짐 없이 조사하는 방법

행 우선 순회

# i 행의 좌표
# j 열의 좌표
for i in range(n):
	for j in range(m):
    	f(array[i][j])

열 우선 순회

# i 행의 좌표
# j 열의 좌표

for j in range(m):
	for i in range(n):
    	f(array[i][j])

지그재그 순회

# i 행의 좌표
# j 열의 좌표

for i in range(n):
	for j in range(m):
    	f(array[i][j] + (m-1-2*j) * (i%2)])

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

  • 2차 배열의 한 좌표에서 4방향의 인접 배열 요소를 탐색하는 방법
  • 인덱스 (i,j)인 칸의 상하좌우 칸 (ni,nj)
arr[N][N]
di = [0, 1, 0, -1]
dj = [1, 0,-1, 0]
for i in range(N-1):
	for j in range(N-1):
    	ni = i + di[k]
        nj = j + dj[k]
        if 0<= ni < N and 0 <= nj <N:
        	print(arr[ni][nj]

전치행렬

# i : 행의 좌표
# j : 열의 좌표
arr = [[1,2,3],[4,5,6],[7,8,9]]

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]

비트 연산자


비트연산자

  • & : 비트 단위로 AND 연산을 한다
  • | : 비트 단위로 OR 연산을 한다.
  • < : 피연산자의 비트 열을 왼쪽으로 이동시킨다.
  • < : 피연산자의 비트 열을 오른쪽으로 이동시킨다.

<< 연산자

  • 1 << n : 2**n 즉, 원소가 n개일 경우의 모든 부분집합의 수를 의미한다.

& 연산자

  • i&(1<<j): i의 j번째 비트가 1인지 아닌지를 검사한다.

Ex) 부분집합

arr = [3,6,7,1,5,4]

n = len(arr)

for i in range(1<<n): # 1<<n : 부분 집합 개수
	for j in range(n):
    	if i & (1<<j):
        	print(arr[j], end=",")
    print()
print()
profile
데이터 분석에서 백엔드까지...

0개의 댓글