Bibi's DevLog ๐ค๐
[Hello Coding ์๊ณ ๋ฆฌ์ฆ] 2์ฅ. ์ ํ ์ ๋ ฌ ๋ณธ๋ฌธ
[Hello Coding ์๊ณ ๋ฆฌ์ฆ] 2์ฅ. ์ ํ ์ ๋ ฌ
๋น๋น bibi 2021. 6. 30. 18:43[210630]
(์ด์ ์ ์ด์ด์ ์์ฑ)
Hello Coding ์๊ณ ๋ฆฌ์ฆ
2์ฅ. ์ ํ ์ ๋ ฌ
๋ฐฐ์ด, ์ฐ๊ฒฐ๋ฆฌ์คํธ, ์ ํ ์ ๋ ฌ์ ๊ดํด ๊ณต๋ถํ๋ค.
๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์ํ๋ ๋ฐฉ๋ฒ
์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ์ ๋์ ๋ฐฉ์.
- ์์ฒญ๋๊ฒ ๋ง์ ์๋์ด ์๊ณ , ๊ฐ ์๋์๋ ์ฃผ์๊ฐ ๋ถ์ด ์๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ์ฅํ ๋๋ ์ปดํจํฐ์๊ฒ ๊ณต๊ฐ์ ์์ฒญํ๋ค.
- ์ฌ๋ฌ ๊ฐ์ ์์๋ฅผ ์ ์ฅํ ๋, '๋ฐฐ์ด'๊ณผ '๋ฆฌ์คํธ' ๋ ๋ฐฉ์ ์ค ํ๋๋ฅผ ์ ํํ๋ค.
๋ฐฐ์ด vs ์ฐ๊ฒฐ ๋ฆฌ์คํธ
๋ฐฐ์ด (array)
- ์น๊ตฌ๋ค๊ณผ ์ํ๋ฅผ ๋ณด๋ฌ ๊ฐ์ ์๋ฆฌ๋ฅผ ์ฐพ์ ๋์ ๋น์ ํ ์ ์๋ค.
- 3๋ช ์ด์ ์ข์์ ์์ฝํ๋๋ฐ ํ ๋ช ์ด ๋ ์๋ค๋ฉด, 4๋ช ์ด์ ๋ถ์ด ์์ ์ ์๋ ์ข์์ผ๋ก ๋ค ๊ฐ์ด ์ฎ๊ฒจ ์์์ผ ํจ
- ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ ๊ฐ์ ์๋ฃํ์ด์ด์ผ ํ๋ค.
- ์ฅ์ : READ๊ฐ ๋น ๋ฅด๋ค.
- ์ธ๋ฑ์ค index : ๋ฐฐ์ด์์๋ ๋ชจ๋ ์์์ ์ฃผ์๋ฅผ ๋ค ์๊ณ ์๋ค.
- ์ธ๋ฑ์ค๋ 1์ด ์๋๋ผ 0๋ถํฐ ์์. (0, 1, 2, 3 ...)
- ์ฆ ๋ฐฐ์ด์์๋ ๋ฐฐ์ด ์์ ์ด๋ค ์์๋ ๋ฐ๋ก ์ฐพ์ ์ ์๋ค. (
O(1)
, ๊ณ ์ ์๊ฐ) - ์์์ ์์ ๊ฐ์ ์ฐพ๋ ๋ฐ ์ต์ ์ด๋ค.
- ์ธ๋ฑ์ค index : ๋ฐฐ์ด์์๋ ๋ชจ๋ ์์์ ์ฃผ์๋ฅผ ๋ค ์๊ณ ์๋ค.
- ๋จ์ : INSERT, DELETE๊ฐ ๋๋ฆฌ๋ค.
- INSERT - ๊ณต๊ฐ์ด ๋ชจ์๋ผ๋ฉด, ๋งค๋ฒ ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์๋ก์ด ์์น๋ก ์ฎ๊ฒจ์ผ ํ๋ค. (
O(n)
, ์ ํ ์๊ฐ) - ์์๋ฅผ ๋ฐ๊ฟ ๋๋ ๋ค์ ์ค๋ ๋ชจ๋ ์์์ ์์น๋ฅผ ๋ฐ๊พธ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ๋ค.
- DELETE - ๋ง์ฐฌ๊ฐ์ง๋ก ์ญ์ ํ ์์ ๋๋ฌธ์ ๋ค๋ฅธ ์์๋ค์ ์ฎ๊ฒจ์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ฆฌ๋ค. (
O(n
), ์ ํ ์๊ฐ)
- INSERT - ๊ณต๊ฐ์ด ๋ชจ์๋ผ๋ฉด, ๋งค๋ฒ ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์๋ก์ด ์์น๋ก ์ฎ๊ฒจ์ผ ํ๋ค. (
- ๋ณด์ : ๋ง์ฝ์ ๋๋นํด ๋ฏธ๋ฆฌ n๊ฐ์ ์๋ฆฌ๋ฅผ ์์ฝํ๋ค
- ํ๊ณ 1 : ๋ง์ฝ์ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ์ง ์๋๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ๊ฒ ๋จ
- ํ๊ณ 2 : n๊ฐ๋ณด๋ค๋ ๋ฐฐ์ด์ด ์ปค์ง๋ค๋ฉด ๋ ๋ค์ ๋ชจ๋ ์์๋ฅผ ์ฎ๊ฒจ์ผ ํจ
์ฐ๊ฒฐ ๋ฆฌ์คํธ (linked list)
- ๋ณด๋ฌผ์ฐพ๊ธฐ์ ๋น์ ํ ์ ์๋ค.
- 1๋ฒ์งธ ์ฅ์๋ก ๊ฐ๋ฉด '๋ค์์ผ๋ก 2๋ฒ์งธ ์ฅ์
~ ๋ก ๊ฐ์์ค', 2๋ฒ์งธ ์ฅ์๋ก ๊ฐ๋ฉด '๋ค์์ผ๋ก 3๋ฒ์งธ ์ฅ์ ~๋ก ๊ฐ์์ค' ...
- 1๋ฒ์งธ ์ฅ์๋ก ๊ฐ๋ฉด '๋ค์์ผ๋ก 2๋ฒ์งธ ์ฅ์
- ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ฌ์ฉ ์, ์์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ ๊ณณ์๋ ๋ ์ ์๋ค.
- ์ํ ๋ณด๋ฌ ๊ฐ์ 4๋ช ์ด ๋ถ์ด ์์ ์ ์๋ ์๋ฆฌ๊ฐ ์๋ค๋ฉด ๊ฐ์ ํฉ์ด์ ธ์ ์ํ๋ฅผ ๋ณด๋ ๊ฒ๊ณผ ๋น์ท.
- ๊ฐ ์์๋ง๋ค ๋ฆฌ์คํธ์ ๋ค์ ์์์ ๋ํ ์ฃผ์๊ฐ ์ ์ฅ๋์ด ์๋ค.
- ์ฅ์ : INSERT, DELETE๊ฐ ๋น ๋ฅด๋ค.
- INSERT - ๋ฉ๋ชจ๋ฆฌ์ ์๋ฌด ๊ณณ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ , ๊ทธ ์ฃผ์๋ฅผ ๋ฐ๋ก ์ ์์์ ์ ์ฅํ๋ฉด ๋จ (
O(1)
, ๊ณ ์ ์๊ฐ) - ์์๋ฅผ ๋ฐ๊ฟ ๋๋ ์ฃผ์๊ฐ๋ง ์์ ํ๋ฉด ๋๋ฏ๋ก ๋งค์ฐ ์ฝ๋ค.
- DELETE - ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ ์ญ์ ํ ์ ์์์์ ์ฃผ์๊ฐ์ ์ญ์ ํ๋ฉด ๋๋ฏ๋ก ๋น ๋ฆ (
O(1)
, ๊ณ ์ ์๊ฐ)
- INSERT - ๋ฉ๋ชจ๋ฆฌ์ ์๋ฌด ๊ณณ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ , ๊ทธ ์ฃผ์๋ฅผ ๋ฐ๋ก ์ ์์์ ์ ์ฅํ๋ฉด ๋จ (
- ๋จ์ : READ๊ฐ ๋๋ฆฌ๋ค.
- ์ํ๋ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ๋ฐ๋ก ์ ์ ์๊ธฐ ๋๋ฌธ์, ๊ทธ ๋ฐ์ดํฐ์ ์ฃผ์๊ฐ์ ๊ฐ์ง ์ด์ ๋ฐ์ดํฐ๋ค์ ์ ๋ถ ์ฐพ์์ผ ํจ (
O(n)
, ์ ํ ์๊ฐ) - ๋ชจ๋ ์์์ ๊ฐ์ ํ ๋ฒ์ ์ฝ๋ ๋ฐ์๋ ์ข์ง๋ง, ํน์ ์์๋ฅผ ์กฐํํ ๋๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ต์ ์.
- ์ํ๋ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ๋ฐ๋ก ์ ์ ์๊ธฐ ๋๋ฌธ์, ๊ทธ ๋ฐ์ดํฐ์ ์ฃผ์๊ฐ์ ๊ฐ์ง ์ด์ ๋ฐ์ดํฐ๋ค์ ์ ๋ถ ์ฐพ์์ผ ํจ (
์ธ๋ฑ์ค index
์์์ ์์น ๋ฒํธ. 0๋ถํฐ ์์ํ๋ค.
[10, 20, 30, 40]
์ด๋ผ๋ ๋ฐฐ์ด์์, ์์ 20
์ ์ธ๋ฑ์ค 1์ ์๋ค.
์์ ์ ๊ทผ vs ์์ฐจ ์ ๊ทผ
์์ ์ ๊ทผ random access
- ์กฐํ๋ฅผ ์ํด ํด๋น ์์๋ก ๋ฐ๋ก ์ ๊ทผํ๋ ๋ฐฉ์ (ex. ๋ฐฐ์ด)
์์ฐจ ์ ๊ทผ sequential access
- ์กฐํ๋ฅผ ์ํด ์์๋ฅผ ์ฒซ ๋ฒ์งธ๋ถํฐ ํ๋์ฉ ์ฝ๋ ๋ฐฉ์ (ex. ์ฐ๊ฒฐ ๋ฆฌ์คํธ)
์ ํ ์ ๋ ฌ selection sort
์ด๋ค ๋ชฉ๋ก์ ์ ๋ ฌํ๊ธฐ ์ํด ์์๋ง๋ค ์ ์ฒด ๋ฆฌ์คํธ๋ฅผ ์กฐํํ๊ณ , ์ ๋ชฉ๋ก์ ์ด๋ฅผ ๊ธฐ๋กํจ.
๋์์๋ฆฌ
์๋ฅผ ๋ค์ด ํ๋ ์ด๋ฆฌ์คํธ๋ฅผ ๋ง์ด ๋ค์ ๊ณก - ์ ๊ฒ ๋ค์ ๊ณก ์์๋ก ์ ๋ ฌํ๊ณ ์ถ์ ๋,
- ์ ์ฒด ๋ชฉ๋ก์ ๋๋ฉฐ ๊ฐ์ฅ ๋ง์ด ๋ค์ ๊ณก์ ์ฐพ๋๋ค (
O(n)
) - ์ ๋ชฉ๋ก์ ๊ทธ ๊ณก์ ๊ธฐ๋กํ๋ค
- ์ ์ฒด ๋ชฉ๋ก์ ๋๋ฉฐ ๋ ๋ฒ์งธ๋ก ๋ง์ด ๋ค์ ๊ณก์ ์ฐพ๋๋ค (
O(n)
) - ์ ๋ชฉ๋ก์ ๊ทธ ๊ณก์ ๊ธฐ๋กํ๋ค
- ๋ชฉ๋ก ์ ์ฒด๋ฅผ ์ ๋ ฌํ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
์๊ฐ ๊ณ์ฐ : ๋ชฉ๋ก์ ๋ชจ๋ ์์๋ฅผ ์กฐํํ๋ ์์
์ ์์์ ๊ฐฏ์๋งํผ ๋ฐ๋ณตํจ. ๋ฐ๋ผ์ O(n x n) = O(n์ ๊ณฑ)
๋งํผ ๊ฑธ๋ฆผ.
โป ๋งค ๋ฐ๋ณต๋ง๋ค ์กฐํํ ๋ชฉ๋ก์ ์ค์ด๋ค์ง๋ง, ๋น
์คํ๊ธฐ๋ฒ์์๋ ์์ํญ์ ๋ฌด์ํ๊ธฐ ๋๋ฌธ์ O(n์ ๊ณฑ)
์ผ๋ก ํ๊ธฐํ๋ค.
ํน์ง
๊น๋ํ ์๊ณ ๋ฆฌ์ฆ์ด์ง๋ง ๋น ๋ฅด์ง ์๋ค.
์ ํ์ ๋ ฌ ์ฝ๋
๋ฐฐ์ด์ ์์ ์ ์์์ ํฐ ์ ์ ์์ผ๋ก ์ ๋ ฌํ๋ ์ฝ๋.
๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ์์๋ฅผ ์ฐพ๋ ํจ์๋ฅผ ์์ฑํ๊ณ , ๊ทธ ํจ์๋ฅผ ์ด์ฉํด ์ ๋ ฌํ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฐฐ์ด์ ๋ด๋๋ค.
def findSmallest(arr):
smallest = arr[0]
smallest_index = 0
for i in range(1, len(arr)):
if arr[i] < smallest: ## ์ค์ ํ ์ต์๊ฐ๋ณด๋ค ๋ฐฐ์ด์ i๋ฒ์งธ ๊ฐ์ด ์๋ค๋ฉด
smallest = arr[i] ## ๊ทธ ๊ฐ์ด ์ต์๊ฐ์ด ๋๋ค
smallest_index = i
return smallest_index
def selectionSort(arr):
newArr = []
for i in range(len(arr)):
smallest = findSmallest(arr)
newArr.append(arr.pop(smallest))
return newArr
print selectionSort([5, 3, 6, 2, 10])
'ํ๋ก๊ทธ๋๋ฐ > Algorithm ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Hello Coding ์๊ณ ๋ฆฌ์ฆ] 4. ํต ์ ๋ ฌ (0) | 2021.07.01 |
---|---|
[Hello Coding ์๊ณ ๋ฆฌ์ฆ] 3์ฅ. ์ฌ๊ท (0) | 2021.06.30 |
[Hello Coding ์๊ณ ๋ฆฌ์ฆ] 1์ฅ. ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ (0) | 2021.06.28 |
ํ๋ก๊ทธ๋๋จธ์ค Lv1 - ์์ฐ์ ๋ค์ง์ด ๋ฐฐ์ด๋ก ๋ง๋ค๊ธฐ (0) | 2021.06.24 |
[Hello Coding ์๊ณ ๋ฆฌ์ฆ] 1. ์๊ณ ๋ฆฌ์ฆ ์๊ฐ (0) | 2021.02.03 |