🐢 Programming/Algorithm

2. Array λ°°μ—΄

지 원 2022. 10. 1. 23:37

λ°°μ—΄

λ°°μ—΄

λ°°μ—΄ : μΌμ •ν•œ μžλ£Œν˜•μ˜ λ³€μˆ˜λ“€μ„ ν•˜λ‚˜μ˜ μ΄λ¦„μœΌλ‘œ μ—΄κ±°ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 자료ꡬ쑰

 

μ•„λž˜μ˜ μ˜ˆλŠ” 6개의 λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 경우, 이λ₯Ό λ°°μ—΄λ‘œ λ°”κΎΈμ–΄ μ‚¬μš©ν•˜λŠ” 것이닀.

Num0 = 0
Num1 = 1
Num2 = 2
Num3 = 3
Num4 = 4
Num5 = 5

Num = [0, 1, 2, 3, 4, 5]

 

λ°°μ—΄μ˜ ν•„μš”μ„±

ν”„λ‘œκ·Έλž¨ λ‚΄μ—μ„œ μ—¬λŸ¬ 개의 λ³€μˆ˜κ°€ ν•„μš”ν•  λ•Œ, 일일이 λ‹€λ₯Έ λ³€μˆ˜λͺ…을 μ΄μš©ν•˜μ—¬ μžλ£Œμ— μ ‘κ·Όν•˜λŠ” 것은 맀우 λΉ„νš¨μœ¨μ μΌ 수 μžˆλ‹€.

배열을 μ‚¬μš©ν•˜λ©΄ ν•˜λ‚˜μ˜ 선언을 ν†΅ν•΄μ„œ λ‘˜ μ΄μƒμ˜ λ³€μˆ˜λ₯Ό μ„ μ–Έν•  수 μžˆλ‹€.

λ‹¨μˆœνžˆ λ‹€μˆ˜μ˜ λ³€μˆ˜λ₯Ό 선언을 μ˜λ―Έν•˜λŠ” 것이 μ•„λ‹ˆλΌ, λ‹€μˆ˜μ˜ λ³€μˆ˜λ‘œλŠ” ν•˜κΈ° νž˜λ“  μž‘μ—…μ„ 배열을 ν™œμš©ν•΄ μ‰½κ²Œ ν•  수 μžˆλ‹€.

 

1차원 λ°°μ—΄

1차원 λ°°μ—΄μ˜ μ„ μ–Έ

λ³„λ„μ˜ μ„ μ–Έ 방법이 μ—†μœΌλ©΄ λ³€μˆ˜μ— 처음 값을 ν• λ‹Ήν•  λ•Œ 생성

이름 : ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•  λ°°μ—΄μ˜ 이름

Arr = list() Arr = () (1차원 λ°°μ—΄ μ„ μ–Έμ˜ 예)

Arr = [1, 2, 3] Arr = [0] * 10

 

1차원 λ°°μ—΄μ˜ μ ‘κ·Ό

Arr[0] = 10 : λ°°μ—΄ Arr의 0번 μ›μ†Œμ— 10을 μ €μž₯

Arr[idx] = 20 : λ°°μ—΄ Arr의 idx번 μ›μ†Œμ— 20을 μ €μž₯

 

μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯ 뢄석 ν•„μš”

  • λ§Žμ€ λ¬Έμ œμ—μ„œ μ„±λŠ₯ λΆ„μ„μ˜ κΈ°μ€€μœΌλ‘œ μ•Œκ³ λ¦¬μ¦˜μ˜ μž‘μ—…λŸ‰μ„ λΉ„κ΅ν•œλ‹€.

 

μ‹œκ°„ λ³΅μž‘λ„(Time Complexity)

μΈ‘μ • 방법

  • μ‹€μ œ κ±Έλ¦¬λŠ” μ‹œκ°„μ„ μΈ‘μ •
  • μ‹€ν–‰λ˜λŠ” λͺ…λ Ήλ¬Έμ˜ 개수λ₯Ό 계산

μ‹œκ°„ λ³΅μž‘λ„ ≓ λΉ…-였(O) ν‘œκΈ°λ²•

 

λΉ…-였 ν‘œκΈ°λ²• (Big-Oh Notation)

μ‹œκ°„ λ³΅μž‘λ„ ν•¨μˆ˜ μ€‘μ—μ„œ κ°€μž₯ 큰 영ν–₯λ ₯을 μ£ΌλŠ” n에 λŒ€ν•œ ν•­λ§Œμ„ ν‘œμ‹œ

κ³„μˆ˜(Coefficient)λŠ” μƒλž΅ν•˜μ—¬ ν‘œμ‹œ

 

ex)

O(3n + 2) = O(3n) = O(n)

O(2n² + 10n + 100) = O(n²)

O(4) = O(1)

: μ΅œκ³ μ°¨ν•­λ§Œ 선택, κ³„μˆ˜ 제거

n개의 데이터λ₯Ό μž…λ ₯ λ°›μ•„ μ €μž₯ν•œ ν›„ 각 데이터에 1μ”© μ¦κ°€μ‹œν‚¨ ν›„ 각 데이터λ₯Ό 화면에 좜λ ₯ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„? → O(n)

 

2차원 λ°°μ—΄

2차원 λ°°μ—΄μ˜ μ„ μ–Έ

1차원 List λ₯Ό 묢어놓은 List

2차원 μ΄μƒμ˜ 닀차원 ListλŠ” 차원에 따라 Indexλ₯Ό μ„ μ–Έ

2차원 List의 μ„ μ–Έ : μ„Έλ‘œκΈΈμ΄(ν–‰μ˜ 개수), κ°€λ‘œκΈΈμ΄(μ—΄μ˜ 개수)λ₯Ό ν•„μš”λ‘œ 함

Python μ—μ„œλŠ” 데이터 μ΄ˆκΈ°ν™”λ₯Ό 톡해 λ³€μˆ˜μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™”κ°€ κ°€λŠ₯함

 

arr=[[0,1,2,3],[4,5,6,7]] (2ν–‰ 4μ—΄μ˜ 2차원 List)

 

2차원 λ°°μ—΄μ˜ μ ‘κ·Ό

λ°°μ—΄ 순회

n x m λ°°μ—΄μ˜ n * m 개의 λͺ¨λ“  μ›μ†Œλ₯Ό 빠짐없이 μ‘°μ‚¬ν•˜λŠ” 방법

 

ν–‰ μš°μ„  순회

# i ν–‰μ˜ μ’Œν‘œ
# j μ—΄μ˜ μ’Œν‘œ

for i in range(n):
        for j in range(m):
                Array[i][j]  # ν•„μš”ν•œ μ—°μ‚° μˆ˜ν–‰

 

μ—΄ μš°μ„  순회

# i ν–‰μ˜ μ’Œν‘œ
# j μ—΄μ˜ μ’Œν‘œ

for j in range(n):
        for i in range(m):
                Array[i][j]  # ν•„μš”ν•œ μ—°μ‚° μˆ˜ν–‰

 

μ§€κ·Έμž¬κ·Έ 순회

# 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 in range(N): # 1 -> N-1
        for j in range(M): # 1 -> N-2 :
                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])

# 1칸이 μ•„λ‹Œ, dμΉΈ μ΄λ™ν•˜κ³  μ‹ΆμœΌλ©΄
# ni = i + di[k] * d
# nj = j + dj[k] * d

μ „μΉ˜ν–‰λ ¬

# 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 < g :
            arr[i][j], arr[j][i] = arr[j][i], arr[i][j]

'🐢 Programming > Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

5. Search 검색  (0) 2022.10.19
4. Array Extra λ°°μ—΄  (0) 2022.10.15
3. Sort μ •λ ¬  (0) 2022.10.02
1. Algorithm μ•Œκ³ λ¦¬μ¦˜  (4) 2022.09.29