cover | coverY | layout | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 |
|
์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์์ ์ด๋ ํ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ธฐ ์ํด์ ์ฐ์ฌ์ง๋ ์ธ์ด
์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์ดํด๊ฐ ์๋ค๋ฉด ๊ตฌํํ๊ณ ์ ํ๋ ๊ธฐ๋ฅ์ ๋ณด๋ค ์ฝ๊ณ ํจ์ธ์ ์ผ๋ก ๋ง๋ค ์ ์๊ฒ ๋์์ค
ํ์ ์ ๊ฒฝ์ฐ ์ฝ๋ฉํ ์คํธ๋ฅผ ๊ณต๋ถํ์ง ์์ ๋๋ถ๋ถ์ ์ธ์ด๋ ํ๋ ์์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ด๋ฏธ ์ ๋ง๋ค์ด์ง ์์ด๋ค์ ๊ฐ์ ธ์์ ๋ง๋ค๊ณ ์ ํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ ธ์์ ์ฌ์ฉ
์๊ณ ๋ฆฌ์ฆ ์์ฑ ํ ์ง์/์๋ต์ ํตํด ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์ผ๋ง๋ ์ดํดํ๊ณ ์๊ณ ์๊ฐ๊ณผ ๊ณต๊ฐ ๋ณต์ก๋์ ๋ํ ์ดํด๊ฐ ์๋์ง ํ์ธํด๋ณด๊ธฐ ์ํจ
EX.
- ํํ ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ ์ด์ ๋?
- ์ด๊ฒ์ด ์ ๊ฒ๋ค์ ๋นํด ์ฅ๋จ์ ์?
- ์ ๊ฒ๊ณผ ์ด๊ฒ์ ์ฐจ์ด๋?
์๋ฃ ๊ตฌ์กฐ๋ ์ด๋ ์ํฉ์ ์ฐ์ด๋ ๊ฒ์ด ์ข๊ณ ๋ ์ด๋ค ์์ API๋ค์ด ์๋์ง ์ด๋ฐ ๊ฒ๋ค ์กฐ๊ธ ํฐ ๊ทธ๋ฆผ์ ๋ณด๋ฉด์ ๊ณต๋ถ
์๋น์ค๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ป๊ฒ ๊ตฌ์กฐ์ ์ผ๋ก ์ ์ ๋ฆฌํด์ ๋ด์๋๊ณ , ๊ด๋ฆฌํ๊ณ ํจ์จ์ ์ธ ๋ฐฉ์์ผ๋ก ํ์ํ ๋ฐ์ดํฐ์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ๊ณ ํ์ํ ์์ ์ฝ์ ์ญ์ ํ ์ ์๋๋ก ๋์์ค๋ค. ๊ธฐ๋ฅ์ ์ ํฉํ ์๋ง๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฐ๋ ๊ฒ์ด ์ค์ํ๋ค.
๐ก ์๋ฃ ๊ตฌ์กฐ ๊ณต๋ถ์ Point
- Order : ์๋ฃ ๊ตฌ์กฐ ์์ ์๋ ๋ฐ์ดํฐ๋ค์ ์์๊ฐ ๋ณด์ฅ?
- Unique : ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด ๊ฐ ์ ์๋๊ฐ?
- Search : ๊ฒ์์ ์ผ๋ง๋ ํจ์จ์ ์ธ๊ฐ?
- Modification : ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ๋ฐ๋ผ์ ์์ ์ ์ผ๋ง๋ ํจ์จ์ ์ธ์ง?
์ถ์ฒ : ๋๊ผด๋ผ์ค https://www.youtube.com/watch?v=BEVnxbxBqi8
- ์๊ณ ๋ฆฌ์ฆ์ ์คํผ๋๋ฅผ ์ด๋ป๊ฒ ํํํ๋์ง ์์๋ด
- ๋น ๋ฅด๋ค, ๋๋ฆฌ๋ค์ ๋ง์ด ์๋
CS์ง์
์ ํ๋ ๊ณต๊ฐ๊ณผ ์๊ฐ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง๋ฅผ ์ ํด๋์ ๋ก์ง
์ฃผ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ์ ๋ ฌ ๋๋ ์ด์ ์ ๊ตฌํ๋ ๋ฑ์ ๋ค์ํ ๊ณ์ฐ์ ํ ์ ์๋ ๊ฒ์ ๋งํจ
์ฆ, ์ฃผ์ด์ง input
์ผ๋ก ์ ์๋ ๊ณ์ฐ์ ์ํํ ๋ค์ output
๊ฒฐ๊ณผ๊ฐ์ ๋ด๋ ๊ฒ
๐ซ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ์ ๋ ฅ์ ํจ์ ๊ด๊ณ
-
โ๋น ๋ฅด๋คโ, โ๋๋ฆฌ๋คโ๋
์๊ฐ
์ผ๋ก ํํํ์ง ์์(์๊ฐ ๋ณต์ก๋)- ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ ๋ด ์ปดํจํฐ๊ฐ ์น๊ตฌ์ ์ปดํจํฐ๋ณด๋ค ๋น ๋ฅผ ์ ์์
- ์ปดํจํฐ๋ผ๋ ํ๋์จ์ด๊ฐ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ
- โ์๋ฃ๊น์ง ๊ฑธ๋ฆฌ๋ ์ ์ฐจ์ ์โ
STEPS
- ์๊ณ ๋ฆฌ์ฆ์ ์ํด ํ์ํ ์ฐ์ฐ์ ํ์
- ํน์ ํฌ๊ธฐ์ ์ ๋ ฅ์ ๋ํ์ฌ ์๊ณ ๋ฆฌ์ฆ์ด ์ผ๋ง๋ ์ค๋ ๊ฑธ๋ฆฌ๋์ง\
-
์ ํ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ ์ฌ์ด์ฆ๊ฐ N๊ฐ์ด๋ฉด, N์คํ ์ด ํ์ํจ
- ๊ณต๊ฐ๋ณต์ก๋ : ํน์ ํ ํฌ๊ธฐ์ ์
๋ ฅ์ ๋ํ์ฌ ์๊ณ ๋ฆฌ์ฆ์ด ์ผ๋ง๋ ๋ง์
๋ฉ๋ชจ๋ฆฌ
๋ฅผ ์ฐจ์งํ๋์ง - ์๊ณ ๋ฆฌ์ฆ์ ์ํด ํ์ํ ๋ฉ๋ชจ๋ฆฌ์ ์
- ์๋ฅผ ๋ค์ด
int a[1004];
๋ผ๋ ๋ฐฐ์ด์ด๋ฉด a ๋ฐฐ์ด์ 1004X4๋ฐ์ดํธ์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ฒ ๋จ
๐ซ ์ฌ์ด์ฆ๊ฐ N๊ฐ๋ฉด, N์คํ ์ด ํ์ํด์!!! ๋ณด๋ค๋ ์ ํ๊ฒ์์ ์๊ฐ ๋ณต์ก๋ = O(N) ์ด๋ ๊ฒ ์ค๋ช ํ๋ ์ปจ์ ์ Big O
- Big O๋ ์๊ฐ๋ณต์ก๋๋ฅผ ํํํ๋ ํ๊ธฐ๋ฒ
- ์ธ์ ๋ฌด์์ ์ธ์ง ๋น ๋ฅด๊ฒ ํ์
๊ฐ๋ฅํ๋ฉฐ, ์์ ์ ์ฝ๋๋ฅผ ํ๊ฐ ๊ฐ๋ฅ
- ์..? ๋ฏธ๋์ ์ด๋ป๊ฒ ์๋ํ ์ ์๋์ง ์ ์ ์์ผ๋
- Big O๋ฅผ ์ดํด์, ์๊ณ ๋ฆฌ์ฆ์ ๋น ๋ฅด๊ฒ ๋ถ์ ๊ฐ๋ฅ, ์ธ์ ๋ฌด์์ ์ธ์ง ํ์ ๊ฐ๋ฅ
- ์๊ณ ๋ฆฌ์ฆ์ ํผํฌ๋จผ์ค๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ณ
ํจ์จ์
์ผ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ
- ์ ํ๊ฒ์์ ์๊ฐ ๋ณต์ก๋ =
O(N)
- but, ํญ์ Big O๊ฐ ๋ชจ๋ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฒฝํ ์ค๋ช ํ๋ ๊ฒ์ ์๋
- ๋ฐฐ์ด์ ์ธํ์ผ๋ก ์ฌ์ฉํ ํจ์, ์ธํ์ ํฌ๊ธฐ ์๊ด์์ด ๋์ผํ ์์ ์คํ
์ด ํ์
- ์๋์ ์ฝ๋๋ print_first๋ผ๋ ํ์ด์ฌ ํจ์๋ฅผ ์ ์ํ๋ฉฐ, ๋งค๊ฐ๋ณ์ arr์๊ฒ ๋ฐ์ผ๋ฉฐ, arr์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ์ถ๋ ฅํด๋
์ธ๋ฑ์ค
๋ฅผ ์ด์ฉํ์ฌ ํ ๋ฒ์ ์ฐพ์ผ๋๊น- ์ด ํจ์์ ์๊ฐ๋ณต์ก๋๋
constant time(์์ ์๊ฐ)
: N์ ํฌ๊ธฐ ์๊ด์์ด ๋๋ด๋๋ฐ ๋์ผํ ์ซ์์ ์คํ ์ด ํ์
def print_first(arr):
print(arr[0])
- ์ด ์ฝ๋์ ๊ฒฝ์ฐ 2๋ฒ์ print๊ฐ ์๋๋ฐ 2๊ฐ์ ์คํ ์ด ํ์ํ ๊ฒ
def print_first(arr):
print(arr[0])
print(arr[0])
๐ซ ์ด๋ ๋ค๋ฉด O[2] ์ผ๊น? NO! ์ฌ์ ํ O[1]
- Big O๋ ํจ์์ ๋ํ
์ผ์ ๊ด์ฌ์ด ์๊ณ , ๋ฌํํ๊ฒ ์ด๋ป๊ฒ ์ด ํจ์๊ฐ
์ธํ์ ์ฌ์ด์ฆ
์ ๋ฐ๋ผ์ ์ด๋ป๊ฒ ์๋ํ๋์ง๊ฐ ์ค์ - ํจ์๋ ์ธํ ์ฌ์ด์ฆ๊ฐ ์์ฒญ๋๊ฒ ์ปค์ ธ๋ ์๊ด์์ด ๋ฏธ๋ฆฌ ์ ํด์ง ์ซ์์ ๋ฐ๋ผ ์๋
- ์ฆ, Big O๋ ํฐ ์๋ฆฌ์๋ง ๊ด์ฌ์ ๊ฐ์ง
- ๊ผญ ๊ธฐ์ตํด ๋ฌ์ผ ํ ๊ฒ์ ๋น
์ค๋
์์
๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์์
- constant time
(์ผ์ ํ ์๊ฐ/์์)
- ์ธํ์ฌ์ด์ฆ์ ๊ด๊ณ์์ด ์คํ ์ด ์ ํด์ง ์๊ณ ๋ฆฌ์ฆ๋ค
- ํญ์ ์ ํธํ๋ ๊ฒ โ ์ธํ์ด ๋์ด๋๋ ๋ณํ์ง ์์
- ํ์ค์ ์ผ๋ก ํญ์ ๋ง๋ค๊ธฐ ํ๋ค๋ค
// ์๊ฐ ๋ณต์ก๋ O(n)์ด ๊ณ์ฐ๋๋ค. O(1)
public class OneToSum {
public int sum(int n){
int sum = 0;
return n * (n + 1) / 2;
}
public static void main(String[] args) {
int n = 5;
// static์ผ๋ก ์ฃผ์ง ์์ ๋
OneToSum object = new OneToSum();
System.out.println(object.sum(10));
}
}
๋ฐฐ์ด์ ์ฌ์ด์ฆ๊ฐ 10์ด๋ผ๋ฉด, 10๋ฒ ํ๋ฆฐํธ ํ๋ ํจ์ : O(N)
def print_all(arr):
for n in arr:
print(n)
Q: ๋ง์ฝ ๋ฐ๋ณต๋ฌธ์ ๋๋ฒ์ด๋ผ๋ฉด O(2N)์ผ๊น? ****
def print_all(arr):
for n in arr:
print(n)
for n in arr:
print(n)
A: 2๋ ์์์ด๊ธฐ์ ๋ฒ๋ ค๋๊ณ , ์ฌ์ ํ O(N)
์ผ๋ก ํํ, ํต์ฌ์ ๋ณํ์ง ์์์ง ๋๋ฌธ
๋ฉ์ธ์ง๊ฐ ๊ฐ๋ค โ ์ธํ์ด ์ฆ๊ฐ
ํ๋ฉด ์คํ
๋ ์ ํ์ ์ผ๋ก ์ฆ๊ฐ
Nested Loops(์ค์ฒฉ ๋ฐ๋ณต)
์ด ์์ ๋, ๋ฐ์- ์๋์ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ๊ฐ ์์ดํ ์ ๋ํด ๋ฃจํ๋ฅผ ๋ฐ๋ณต, ์คํ
def print_twice(arr)
for n in arr:
for x in arr:
print(x, n)
-
์๊ฐ๋ณต์ก๋ : ์ธํ
$n^2$ EX. ์ธํ์ด 10๊ฐ์ 100๋ฒ์ ์คํ : ๋ฃจํ ์์ ๋ฃจํ์์ ํจ์๋ฅผ ์คํ์ํค๊ธฐ ๋๋ฌธ
์ ํ ์๊ฐ๋ณต์ก๋๊ฐ 2์ฐจ ์๊ฐ๋ณต์ก๋๋ณด๋ค ๋ ํจ์จ์
- ์ด์ง๊ฒ์ ์๊ณ ๋ฆฌ์ฆ ์ค๋ช
์ ์ฌ์ฉ โ ์ผ๋ง๋
๋น ๋ฅธ์ง
์ค๋ช ๊ฐ๋ฅ- ์ด์ง ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ์ธํ ์ฌ์ด์ฆ๊ฐ 2๋ฐฐ๊ฐ ๋์ด๋ ํ์ํ step์ ์๋ 1๊ฐ๋ฐ์ ์๋ค์ด๋จ
- ์๋? ์ด์ง๊ฒ์์ ๊ฐ ํ๋ก์ธ์ค์ ์คํ ์ ์ ๋ฐ์ผ๋ก ๋๋ ์ ํ๊ธฐ ๋๋ฌธ์ด
- ํํ๋ฒ :
O(log N)
- ์ ๋ ฌ๋ ๋ฐฐ์ด์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- exponent(์ง์) โ logarithm(๋ก๊ทธ)
- n =
$log_232$ n์ 32๋ฅผ 2๋ก ๋ช๋ฒ์ ๋๋ ์ผ 1์ด ๋์ฌ๊น?
๐ซ 32 / 2 = 16 โ 1 16 / 2 = 8 โ 2 8 / 2 = 4 โ 3 4 / 2 = 2 โ 4 2 / 2 = 1 โ 5 times
-
n์ 5
โ ์ด์ง ๊ฒ์๊ณผ ๊ฐ์ ์ธํ์ ๋ฐ์ผ๋ก ๋๋๊ณ ์์ํ๋ ๊ฒ์ฒ๋ผ
โ Big O์ ํน์ฑ์ n =
$log32$ ์๋์ 2๊ฐ ์ฌ๋ผ์งโ So,
log N
์ด ๋๋ ๊ฒ -
๋ก๊ทธ ์๊ฐ๋ณต์ก๋์ ๊ทธ๋ํ
์ ํ์๊ฐ๋ณด๋ค๋ ๋น ๋ฅด๊ณ
, ์์ ์๊ฐ๋ณด๋ค๋ ๋๋ฆผ
O(1) > O(logN) > O(N) ์์ผ๋ก ๊ฐ์ฅ ํจ์จ์ ์ด๋ค.
O(logN)์ ์์ฃผ ์กฐ๊ธ์ฉ ์ฆ๊ฐํ๋ ๊ณก์ ์ ๊ทธ๋ฆฌ๊ณ ์๋๋ฐ O(1)๋ณด๋ค๋ ๋ ํจ์จ์ ์ด์ง๋ง O(N)๋ณด๋ค๋ ํจ์ฌ ํจ์จ์ ์ด๋ค.
์ฌ์ง ์ถ์ฒ : https://velog.io/@welloff\_jj/Complexity-and-Big-O-notation
์ถ์ฒ : https://velog.io/@on-n-on-turtle/๋๊ตฌ๋-์๋ฃ๊ตฌ์กฐ์-์๊ณ ๋ฆฌ์ฆ-๋น ์คํ๊ธฐ๋ฒ
public static void printThings() {
String[] things = {"apples", "chairs", "files", "notes"};
for (String thing : things)
System.out.printf("Here's a thing : %s \n", thing);
}
์ด ์๊ณ ๋ฆฌ์ฆ์ for
๋ฃจํ์์ ๋ฐฐ์ด์ ์์๊ฐ 4๊ฐ์ด๊ธฐ ๋๋ฌธ์ 4๋จ๊ณ๊ฐ ๊ฑธ๋ฆฐ๋ค.
๋ง์ฝ ๋ฐฐ์ด์ ์์๊ฐ 10๊ฐ์ด๋ฉด 10๋จ๊ณ๊ฐ ๊ฑธ๋ฆด ๊ฒ์ด๋ค.
for
๋ฃจํ์ ๋์
๋๋ ๋ฐฐ์ด์ ์์ ๊ฐฏ์๋งํผ ๋จ๊ณ๊ฐ ๊ฑธ๋ฆฌ๋ฏ๋ก ์ด ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ O(N)์ด๋ค.
public static boolean isLeapYear(int year) {
return (year % 100 == 0) ? (year % 400 == 0) : (year % 4 == 0);
}
N
์ number
์ด๋ค.
ํจ์๋ก ์ ๋ฌ๋ ์์ ์๊ด์์ด ๋จ๊ณ ์๊ฐ ์ผ์ ํ๋ฏ๋ก O(1)์๊ณ ๋ฆฌ์ฆ์ด๋ค.
8์ 23์ผ ๊ตญ๋น ๊ฐ์ ๋ค์ผ๋ฉด์ ์ ๋ฒ์ฃผ์ ์งํํ ์คํฐ๋์์ ๋ค๋ฅธ ๋ถ์ด ์ ๋ฆฌ ํ ์ถ๊ฐ ๋ด์ฉ
- ์ฝ์ /์ญ์ : O(N)
- ํ์: O(1)
๐ ํ์ด์ฌ์์๋ ๋จ์ํ List๋ก ๊ตฌํํ๋ค. ๐ ํ์ํ ๋ ์ฌ์ฉํ๊ธฐ ์ข์ ์๋ฃ๊ตฌ์กฐ(์ฝ์ ์ด๋ ์ญ์ ๋ ํ์๋ฆฌ์ฉ ๋ค๋ก ์ฎ๊ธฐ๊ฑฐ๋ ํ๋ ์์ผ๋ก ์ด๋ฃจ์ด์ง ์ ์๊ธฐ ๋๋ฌธ์, ์๊ฐ๋ณต์ก๋๊ฐ O(N)์ด๋๋ค.)
์ฝ์ /์ญ์ : O(N)
ํ์: O(1)
๐ ํ์ด์ฌ์์๋ ๋จ์ํ List๋ก ๊ตฌํํ๋ค. C++ ๊ฐ์ ์ธ์ด์์๋ ๋ฐฐ์ด๊ณผ ๋ฒกํฐ๋ ๋ค๋ฅด๋ค. ํ์ง๋ง ํ์ด์ฌ์์๋ ๋ฐฐ์ด๊ณผ ๊ฐ์ List๋ก ์ฐ๋ฉด ๋๋ค. List ์์ฒด๊ฐ ์ด๋ฏธ ๋์ ๋ฐฐ์ด์ ์ง์ํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ฝ์ /์ญ์ : O(1)
- ํ์: O(N)
- ๋งํฌ๋ ๋ฆฌ์คํธ
๐ ์๊ฐ๋ณต์ก๋ ์ธก๋ฉด์์ ๋ฐฐ์ด(List)์ ๋ฐ๋ ๋๋ค. (ํ์์ ํ๋ ค๋ฉด ์๊ฐ์ ์ผ๋ก ํฌ์ธํฐ ๋ถ๋ถ์ ์ฐ๊ณ ์ฐ๊ณ ๊ฐ์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์์ด O(N)์ด ๋๊ณ , ์ฐ๊ฒฐ ์์ฒด์ ์๋ค๋ก ์์ ๋ง ํ๋ฉด ๋๋ฏ๋ก ์ฝ์ /์ญ์ ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(1)์ด ๋๋ค.
๐ ๋งํฌ๋ ๋ฆฌ์คํธ๋ ๋ฐฑ์ค ๋ฌธ์ ๋ฅผ ํ๋ฉฐ ๋ง ์ฌ์ฉํ ์ผ์ด ๋ง์ง๋ ์์ง๋ง, ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ ๊ตฌํ์๋ ๋ง์ด ์ฐ์ด๋ ์ด๋ก ์ ์์๋ ํ์๊ฐ ์๋ค.
(๋ฉด์ ์ง๋ฌธ์ผ๋ก๋ ๋์ฌ ์ ์๊ฒ ๋ค! ex) "์ฐ๋ฆฌ ํ๋ก๊ทธ๋จ์ ์ฝ์ /์ญ์ ๊ฐ ๋น๋ฒํ๋ฐ ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ธํ ๊ฐ??")
- ์ฝ์ /์ญ์ : O(1)
๐ Last In First Out ๐ ํ์ด์ฌ์์ ๊ตฌํ์ List๋ก ํ๋ค.
s = [1,2,3,4,5,6]
while(len(s)>0):
print(s[-1])
s.pop(-1)
์์ ์ฝ๋ ์ฒ๋ผ ๊ตฌํ ๋๋ฉด ๋๋๋ฐ, ๋ฐฐ์ด์ ๋ง์ง๋ง ๊ฑฐ๋ฅผ ๊บผ๋ด๋ ๊ฑฐ๋ค.
- ์ฝ์ /์ญ์ : O(1)
๐ ์ค์๊ธฐ Last in Last Out ๐ from collections import deque ๋ก ์ํฌํธํ์ฌ ๋ฐํ๋ฅผ ์ฌ์ฉํ๋ค.
from collectionsimport deque
q = deque()
q.append(1)
q.append(2)
q.append(3)
while(len(q) >0):
print(q.popleft())
์ ์ฝ๋์์ ๋ณด๋ฉด popleft() ๋ผ๋ ํจ์๋ฅผ ํตํด ์ฒ์์ ์๋ ๊ฐ์ ๋นผ๋๋ฐ, ๋ฐํ๋ popright()๋ผ๋ ํจ์๋ ์ง์ํ๋ค.
๐ ๋ํ ํ์ด์ฌ์๋ Queue๋ ์๊ณ Deque๋ ์๋๋ฐ Queue๋ ๋ฉํฐ ์ค๋ ๋ฉ๋ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฌ์ Deque๋ณด๋ค ๋๋ฆฌ๋ค. ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํธ๋ ์ ์ฅ์ด๋ฏ๋ก Deque๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
- ์ฝ์ /์ญ์ : O(logN)
import heapq
# ๋ฆฌ์คํธ๋ฅผ ํ๋ ๋ง๋ค๊ณ ์ฌ์ฉํ๋ค.
pq = []
heapq.heappush(pq,3)
heapq.heappush(pq,1)
heapq.heappush(pq,2)
while(len(pq) >0):
print(heapq.heappop(pq))
๐ ํ์ด์ฌ์ MinHeap ์ด๋ค.(์ด์งํธ๋ฆฌ์ ์ต์์๋ ํญ์ ์ต์๊ฐ์ธ)
๐ ์ฐ์ ์์ ํ ๊ฐ์ ๊ฒฝ์ฐ์๋ , ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ฌ๋ฌ ๊ฐ๋ค์ ๋ฃ๊ณ ๋บ๋๋ง๋ค ์ ค ์์ ๊ฐ์ด๋ ์ ค ํฐ ๊ฐ์ ์์์ผ ํ ๋ ์จ์ผ ํ๋ค. Sort() ๊ฐ์ ๊ฒฝ์ฐ ์ ์ฒด ๋ฆฌ์คํธ ์์ฒด๋ฅผ ์ ๋ ฌํด์ค๋ค๋ ์ ์์ ํฐ ์ฐจ์ด์ ์ ๊ฐ์ง๋ค.
- ์ฝ์ /์ญ์ : O(1)
๐ ํ์ด์ฌ์ ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ถ๊ฐ๋ก, c++๊ฐ์ ๊ฒฝ์ฐ๋ O(logN)์ด ๋๋๋ฐ ์ด๋ c++์ ๋งต์ ์์ ๋ค์ฌ๋ค ๋ณด๋ฉด ์ด์ง ๊ทธ๋ํ๋ก ๊ตฌํ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ด๊ณ , python์ ๋์ ๋๋ฆฌ์ ๊ฒฝ์ฐ๋ ํด์๋ก ๊ตฌํ์ด ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฝ์ /์ญ์ : O(logN)
๐์ค๋ณต์ ์ ๊ฑฐํ๋๊ฒ ํฐ ํน์ง!
O(1)
- ์์ ์๊ฐ(Constant Time): ์ ๋ ฅ ํฌ๊ธฐ์ ์๊ด์์ด ํญ์ ์ผ์ ํ ์๊ฐ์ด ์์O(log n)
- ๋ก๊ทธ ์๊ฐ(Logarithmic Time): ์ ๋ ฅ์ ํฌ๊ธฐ์ ๋ํด ๋ก๊ทธ์ ํํ๋ก ์ฆ๊ฐํ๋ ์๊ฐ์ด ์์O(n)
- ์ ํ ์๊ฐ(Linear Time): ์ ๋ ฅ ํฌ๊ธฐ์ ๋น๋กํ์ฌ ์๊ฐ์ด ์ ํ์ผ๋ก ์ฆ๊ฐO(n log n)
- ์ ํ ๋ก๊ทธ ์๊ฐ(Linearithmic Time): n๊ณผ log n์ ๊ณฑ๋งํผ ์๊ฐ์ด ์ฆ๊ฐO(n^2)
- ์ด์ฐจ ์๊ฐ(Quadratic Time): ์ ๋ ฅ ํฌ๊ธฐ์ ์ ๊ณฑ์ ๋น๋กํ์ฌ ์๊ฐ์ด ์ฆ๊ฐO(n^k)
- ๋คํญ ์๊ฐ(Polynomial Time): ์ ๋ ฅ ํฌ๊ธฐ์ k ์ ๊ณฑ์ ๋น๋กํ๋ ์๊ฐ์ด ์์(k๋ ์์).O(2^n)
- ์ง์ ์๊ฐ(Exponential Time): ์ ๋ ฅ ํฌ๊ธฐ์ ๋ํด ์ง์์ ์ผ๋ก ์๊ฐ์ด ์ฆ๊ฐO(n!)
- ํฉํ ๋ฆฌ์ผ ์๊ฐ(Factorial Time): ์ ๋ ฅ ํฌ๊ธฐ์ ํฉํ ๋ฆฌ์ผ์ ๋น๋กํ๋ ์๊ฐ์ด ์์