1οΈβ£ Javaμ λ°°μ΄.
1οΈβ£ λ°°μ΄μ΄λ 무μμΈκ°?
λ°°μ΄(Array)μ λμΌν νμ μ μ¬λ¬ μμλ₯Ό νλμ λ³μλ‘ κ΄λ¦¬ν μ μκ² ν΄μ£Όλ μλ£κ΅¬μ‘°μ λλ€.
λ°°μ΄μ μ°μλ λ©λͺ¨λ¦¬ 곡κ°μ ν λΉλλ©°, κ° μμλ μΈλ±μ€λ₯Ό ν΅ν΄ μ κ·Όν μ μμ΅λλ€.
2οΈβ£ λ°°μ΄μ μ μΈκ³Ό μ΄κΈ°ν.
Javaμμ λ°°μ΄μ λ€μκ³Ό κ°μ΄ μ μΈνκ³ μ΄κΈ°νν μ μμ΅λλ€.
int[] array = new int[5]; // ν¬κΈ°κ° 5μΈ μ μν λ°°μ΄ μ μΈ.
int[] array = {10, 20, 30, 40, 50}; // μ΄κΈ°νμ λμμ λ°°μ΄ μ μΈ
3οΈβ£ λ°°μ΄μ μμμ μ κ·Ό.
λ°°μ΄μ κ° μμλ μΈλ±μ€λ₯Ό ν΅ν΄ μ κ·Όν μ μμΌλ©°, μΈλ±μ€λ 0λΆν° μμν©λλ€.
int firstElement = array[0]; // element = 10, 첫 λ²μ§Έ μμμ μ κ·Ό
array[1] = 25; // [10, 25, 30, 40, 50], λ λ²μ§Έ μμμ κ° 25λ₯Ό μ μ₯
4οΈβ£ λ°°μ΄μ μκ° λ³΅μ‘λ.
λ°°μ΄μ μκ° λ³΅μ‘λλ μ°μ°μ μ’ λ₯μ λ°λΌ λ€λ¦ λλ€.
μλλ μΌλ°μ μΈ λ°°μ΄ μ°μ°κ³Ό κ·Έ μκ° λ³΅μ‘λλ₯Ό μ€λͺ ν κ²μ λλ€.
1. μ κ·Ό(Access)
- νΉμ μΈλ±μ€μ μμμ μ κ·Όνλ μκ° λ³΅μ‘λλ O(1)μ
λλ€.
- μ΄μ : λ°°μ΄μ μ°μλ λ©λͺ¨λ¦¬ 곡κ°μ μ μ₯λλ―λ‘ μΈλ±μ€λ₯Ό ν΅ν΄ λ°λ‘ μ κ·Όν μ μκΈ° λλ¬Έμ λλ€.
// μ κ·Ό(Access)
int element = array[2];
// element = 30, time complexity = O(1)
// [10, 25, 30, 40, 50]
2. νμ(Search)
- λ°°μ΄μμ νΉμ κ°μ μ°Ύλ μκ° λ³΅μ‘λλ O(n)μ
λλ€.
- μ΄μ : μ΅μ μ κ²½μ° λ°°μ΄μ λͺ¨λ μμλ₯Ό κ²μ¬ν΄μΌ ν μλ μκΈ° λλ¬Έμ λλ€.
boolean found = false;
int target = 30;
for (int i = 0; i < array.length; i++) {
if (array[i] == target) { // i = 2, array[i] = 30
found = true;
break;
}
}
// [10, 25, 30, 40, 50]
3. μ½μ (Insertion)
- λ°°μ΄μ λμ μμλ₯Ό μΆκ°νλ μκ° λ³΅μ‘λλ O(1)μ λλ€.
- λ°°μ΄μ νΉμ μμΉμ μμλ₯Ό μ½μ
νλ μκ° λ³΅μ‘λλ O(n)μ
λλ€.
- μ΄μ : νΉμ μμΉμ μ½μ νκΈ° μν΄μλ ν΄λΉ μμΉ μ΄νμ λͺ¨λ μμλ₯Ό ν μΉΈμ© λ€λ‘ λ°μ΄μΌ νκΈ° λλ¬Έμ λλ€.
// μ½μ
(Insertion)
// λ°°μ΄ μ½μ
μ indexκ° array.lengthκ° μλκ³ array.length - 1μΈ μ΄μ λ
// array.lengthλ λ°°μ΄μ ν¬κΈ°, μ¦ 5λ₯Ό λνλ΄κΈ° λλ¬Έμ
λλ€.
// indexλ 0λΆν° μμνκΈ° λλ¬Έμ λ°°μ΄μ ν¬κΈ°κ° 5μΈ λ°°μ΄μ λ indexλ 4μ
λλ€.
// λλ¬Έμ array.length - 1μ ν΄μ€λλ€.
array[array.length - 1] = 60; // λ°°μ΄ λμ μ½μ
(O(1)), [10, 25, 30, 40, 60]
// λ°°μ΄ μ€κ°μ μ½μ
νλ λ©μλ
public static void insertion(int[] array, int index, int insertValue) {
// λ°°μ΄ μ€κ°μ μ½μ
(O(n))
for (int i = array.length - 1; i > index; i--) {
array[i] = array[i - 1];
}
array[index] = insertValue;
System.out.println(Arrays.toString(array));
}
4. μμ (Deletion)
- λ°°μ΄μ λμμ μμλ₯Ό μ κ±°νλ μκ° λ³΅μ‘λλ O(1)μ λλ€.
- λ°°μ΄μ νΉμ μμΉμ μμλ₯Ό μ κ±°νλ μκ° λ³΅μ‘λλ O(n)μ
λλ€.
- μ΄μ : νΉμ μμΉμ μμλ₯Ό μ κ±°ν νμλ ν΄λΉ μμΉ μ΄νμ λͺ¨λ μμλ₯Ό ν μΉΈμ© μμΌλ‘ λΉκ²¨μΌ νκΈ° λλ¬Έμ λλ€.
// μμ (Deletion)
array[array.length - 1] = 0; // λ°°μ΄μ λμμ μμ ((O(1)), [10, 25, 30, 77, 0]
System.out.println(Arrays.toString(array));
// λ°°μ΄ μ€κ°μμ μμ νλ λ©μλ
int deletionValue = deletion(array, 2);
System.out.println(deletionValue); // 30
// λ°°μ΄ μ€κ°μ μμ νλ λ©μλ
public static int deletion(int[] array, int index) {
// λ°°μ΄ μ€κ°μ μμ (O(n))
int[] returnValue = new int[array.length];
for (int i = index, j = 0; i < array.length - 1 ; i++) {
returnValue[j] = array[i];
j++;
array[i] = array[i + 1];
}
array[array.length - 1] = 0; // λ§μ§λ§ μμ μ΄κΈ°ν.
int deletionValue = returnValue[0]; // λ°°μ΄μ λ©λͺ¨λ¦¬μμ μ§μ°κΈ°
returnValue = null;
return deletionValue;
}
5οΈβ£ λ°°μ΄μ μ₯μ κ³Ό λ¨μ .
μ₯μ .
- λΉ λ₯Έ μ κ·Ό μλ : μΈλ±μ€λ₯Ό ν΅ν΄ O(1) μκ°μ μμλ₯Ό μ κ·Όν μ μμ΅λλ€.
- λ©λͺ¨λ¦¬ ν¨μ¨ : μ°μλ λ©λͺ¨λ¦¬ 곡κ°μ μ¬μ©νλ―λ‘ λ©λͺ¨λ¦¬ μ¬μ©μ΄ ν¨μ¨μ μ λλ€.
λ¨μ .
- κ³ μ λ ν¬κΈ° : λ°°μ΄μ ν¬κΈ°λ μ μΈ μμ κ³ μ λλ―λ‘, μ€ν μ€μ ν¬κΈ°λ₯Ό λ³κ²½ν μ μμ΅λλ€.
- μ½μ λ° μμ μ λΉν¨μ¨μ± : λ°°μ΄ μ€κ°μ μμλ₯Ό μ½μ νκ±°λ μμ ν λ O(n)μ μκ°μ΄ μμλ©λλ€.
- μ°μλ λ©λͺ¨λ¦¬ ν λΉ νμ : ν° λ°°μ΄μ μ¬μ©ν λλ μ°μλ λ©λͺ¨λ¦¬ 곡κ°μ΄ νμνμ¬ λ©λͺ¨λ¦¬ ν λΉμ μ νμ΄ μμ μ μμ΅λλ€.
λ°°μ΄μ μ΄λ¬ν νΉμ±λ€λ‘ μΈν΄ λΉ λ₯Έ μ κ·Όμ΄ νμν μν©μμλ λ§€μ° μ μ©νμ§λ§, μ½μ λ° μμ κ° λΉλ²ν μΌμ΄λλ κ²½μ°μλ λΉν¨μ¨μ μΌ μ μμ΅λλ€.
λ°λΌμ μν©μ λ§κ² μ μ ν μλ£κ΅¬μ‘°λ₯Ό μ ννλ κ²μ΄ μ€μν©λλ€.