| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 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 |
- JPA
- ๋ฐฑ์๋๊ณต๋ถ
- Java
- ์ ๋ก๋ฒ ์ด์ค
- LinkedList
- ์๋ฃ๊ตฌ์กฐ
- ์คํ๋ง๋ถํธ
- error
- ๊ฐ๋ฐ์
- queue
- ORM
- ์๋ฒ
- SpringSecurity
- ๋ฐฑ์๋์ค์ฟจ
- array
- restTemplate
- ์ปดํจํฐ ๊ณตํ
- ์ฐ๊ด๊ด๊ณ
- ํต์ฌ๊ฐ์ด๋
- ๋ฐฑ์๋
- ํ๋ก๊ทธ๋๋จธ์ค
- JWT
- SpringBoot
- ๋ฐฑ์ค
- QueryDSL
- ์ปดํจํฐ ๊ตฌ์กฐ
- TestCode
- spring boot
- actuator
- spring
- Today
- Total
be_better
[์๋ฃ๊ตฌ์กฐ] ๋ฐฐ์ด (Array) ๋ณธ๋ฌธ
๋ชฉ์ฐจ
๐ ๋ฐฐ์ด (Array)
๋ฐฐ์ด์ index์ data๊ฐ 1:1๋ก ๋งคํ๋์ด ์๋ ํํ๋ก ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉ๋๋ค. (๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐ)
index๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ data๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ฐ์์ ์ผ๋ก ์ ์ฅ๋๋ค.
๋ฐฐ์ด์ ์์๋ค์ type์ ๋ค ๊ฐ์์ผ ํ๊ณ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์๋ค ๋ชจ๋ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋๋ค.
index์ ์์ ๋ฐ๋ผ ์ฐจ์์ด ๋ค๋ฅธ ๋ฐฐ์ด์ ๋ง๋ค ์ ์๋ค. (1์ฐจ์๋ฐฐ์ด, 2์ฐจ์๋ฐฐ์ด, ...)
๐ ์ฅ์
index๋ก ๊ด๋ฆฌํ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ์ฐ์์ ์ผ๋ก ์ ์ฅ๋์ด์๊ธฐ ๋๋ฌธ์
์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋ค.
๐ ๋จ์
๋ฐฐ์ด์ ์์ฑํ ๋ ๋ฏธ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์ ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ธฐ ์ํด์๋ ๋ฐฐ์ด์ ๋ค์ ๋ง๋ค์ด์ค์ผ ํ๋ค.
๋ฐ์ดํฐ ์ถ๊ฐ/์ญ์ ์์ ์์๋ฅผ ์ ์ฒด์ ์ผ๋ก ์ด๋์์ผ์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๋ค.
โ๐ป ๋ฐฐ์ด ADT (์ถ์ ๋ฐ์ดํฐ ํ์ )
| create(size) | size๋ฅผ ๋ฐ์ ๋ฐฐ์ด ์์ฑ | |
| insert(index, item) | index์ ์ถ๊ฐํ item์ ๋ฐ์ ํด๋น index์ ์ฝ์ | |
| remove(item) | item์ ๋ฐ์ ์์ผ๋ฉด ์ญ์ | |
| isOver(index) | index๊ฐ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ณด๋ค ํฐ์ง ํ์ธ true, false | |
| print() | ๋ฐฐ์ด ์ ์ฒด ์์ ์ถ๋ ฅ | |
โ๏ธ ๋ฐฐ์ด ๊ธฐ๋ฅ & ๋์์๋ฆฌ
์์ฑ
- size๊ฐ์ ์ ๋ ฅ๋ฐ์
- ์ ๋ ฅ๋ฐ์ size๋ฅผ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ก ์ค์
// ์๋ ์ฝ๋
Array arr;
public void create(int size) {
arr = new Array[size];
}
์ฝ์
- index์ item์ ์ ๋ ฅ๋ฐ์
- isOver(index)๋ก ์ ๋ ฅ๋ฐ์ index๊ฐ ์ ํจํ์ง ํ์ธ
- isOver(index)๊ฐ true๋ฅผ ๋ฐํํ๋ค๋ฉด ์ค๋ฅ ๋ฐ์ ํ ์ข ๋ฃ
- ์ข ๋ฃ๋์ง ์๋๋ค๋ฉด ๊ธฐ์กด ๋ฐฐ์ด์ ํด๋น index์ ๊ฐ์ ๋ณด์กดํ๊ธฐ ์ํด (size + 1)์ ํ ์๋ก์ด ๋ฐฐ์ด ์์ฑ
- ์ ๋ ฅ๋ฐ์ index๋ฅผ ์ ์ธํ ๋๋จธ์ง ๊ณต๊ฐ์ ๊ธฐ์กด ๋ฐฐ์ด์ ๊ฐ๋ค ์ฑ์
- ์ ๋ ฅ๋ฐ์ index์ ์ ๋ ฅ๋ฐ์ item ์ฝ์
// ์๋ ์ฝ๋
public void insert(int index, T item) {
if (isOver(index)) { // ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ํด๋น ์ธ๋ฑ์ค๋ณด๋ค ํฌ๋ฉด
print(error); // ์๋ฌ ๋ฐ์
}
T[] temp = arr.clone(); // temp ๋ฐฐ์ด์ ์๋ ๋ฐฐ์ด ๋ณต์ฌํด๋๊ธฐ
arr = new T[arr.length + 1]; // item์ ๋ฃ์ ๊ณต๊ฐ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ size + 1
for (i = 0; i < index; i++) {
arr[i] = temp[i]; // 0๋ถํฐ index ์ ๊น์ง๋ ๋ฐ์ดํฐ ๊ทธ๋๋ก ์ ์ง
}
for (i = index + 1; i < arr.length; i++) {
arr[i] = temp[i-1]; // index ๋ค์ ๋ถํฐ ๋๊น์ง
}
arr[index] = item; // index์์น์๋ ์๋ฌด๊ฒ๋ ์๊ธฐ ๋๋ฌธ์ item์ ๋ฃ์ ์ ์๋ค.
}
์ญ์
- item ์ ์ ๋ ฅ๋ฐ์
- ๋ฐฐ์ด์ ์ฒ์๋ถํฐ ๋๊น์ง ๋๋ฉฐ item์ด ์๋์ง ํ์ธ
- ์๋ค๋ฉด ์๋ฌ ๋ฐ์ ํ ์ข ๋ฃ
- ์์ผ๋ฉด ํด๋น index๋ฅผ ๋ฐ์์ด (targetIndex๋ก ๋ณ์ ์ ์ธ)
- ๋ฐ๋ก ์ง์ฐ๋ ์์ ํ์์์ด targetIndex ๋ค์ index๋ถํฐ ํ๋์ฉ ์ค์ฌ์ item์ ์ญ์
// ์๋ ์ฝ๋
public void remove(T item) {
int targetIndex = -1; // ์ต์ index๋ 0์ด๊ธฐ ๋๋ฌธ์ -1์ ๋ฃ์ด์ค
for (i = 0; i < item.length; i++) {
if (arr[i] == item) {
targetIndex = i; // ์ฐพ์ผ๋ฉด ํด๋น index๋ฅผ targetIndex์ ๋ฃ์ด์ค
break; // ์ฐพ์ผ๋ฉด ๋ฐ๋ก for๋ฌธ์ ๋น ์ ธ๋๊ฐ
}
}
if (targetIndex == -1) {
print(error); // targetIndex๊ฐ -1์ด๋ ๊ฒ์ ํด๋น item์ด ์์์ ์๋ฏธ
} else {
T[] temp = arr.clone(); // temp ๋ฐฐ์ด์ ์๋ ๋ฐฐ์ด ๋ณต์ฌํด๋๊ธฐ
arr = new T[arr.length - 1]; // item์ ํ๋ ์ง์ฐ๋ฉด ๊ธธ์ด๊ฐ ํ๋ ์ค์ด๋ฆ
for (i = 0; i < targetIndex; i++) {
arr[i] = temp[i]; // 0๋ถํฐ targetIndex ์ ๊น์ง๋ ๋ฐ์ดํฐ ๊ทธ๋๋ก ์ ์ง
}
for (i = targetIndex; i < arr.length; i++) {
arr[i] = temp[i+1];
/*
* ๊ธฐ์กด targetIndex์ ๊ฐ์ ์ง์์ ์ผ ํ๊ธฐ ๋๋ฌธ์
* targetIndex๋ถํฐ ๋๊น์ง
* ๊ธฐ์กด ์์น์ ๋ค์ ์์น item๋ค๋ก ๋ฎ์ด์ฐ๊ธฐ ํด์ค๋ค.
*/
}
}
}
โฑ๏ธ ๋ฐฐ์ด์ ์๊ฐ๋ณต์ก๋
- ์ ๊ทผ(access) O(1)
- ๊ฒ์(search) O(n)
- ์ถ๊ฐ(add) O(1) or O(n)
- ์ ๊ฑฐ(remove) O(1) or O(n)
์ ๊ทผ (access)
๋ฐฐ์ด์ ์ ๊ทผ์ n๋ฒ์งธ ์ธ๋ฑ์ค์ ๊ฐ์ ์ฐพ์๋ด๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ index๊ฐ์ ์ ํํ ์๊ณ ์๋ค๋ฉด O(1)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
๊ฒ์ (search)
๋ฐฐ์ด์ ๊ฒ์์ ์์ฐจ๊ฒ์์ด๋ฏ๋ก
์ต์ ์ผ๋ก๋ ์ ์ผ ์ฒซ index๋ถํฐ ๋ฐฐ์ด์ ๋๊น์ง ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์ O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
์ถ๊ฐ (add) , ์ ๊ฑฐ(remove)
ํด๋น index๋ฅผ ์ ํํ ์๊ณ ์๋ค๋ฉด O(1),
๋ชจ๋ฅด๋ ์ํ๋ผ๋ฉด ๊ฒ์์ ํตํด ์ง์ index๋ฅผ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ ๊ฒฝ์ฐ O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
'์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์๋ฃ๊ตฌ์กฐ] ํธ๋ผ์ด (Trie) (0) | 2023.08.24 |
|---|---|
| [์๋ฃ๊ตฌ์กฐ] ํ (Queue) (0) | 2023.08.10 |
| [์๋ฃ๊ตฌ์กฐ] ์คํ (Stack) (0) | 2023.08.10 |