π μλ£κ΅¬μ‘° - μ€ν, νμ λν΄ μ€λͺ νμμ€.
9) μλ£κ΅¬μ‘° - μ€ν, νμ λν΄ μ€λͺ νμμ€.
μ€ν(stack)
LIFO(Last In First Out) ννλ‘ λ°μ΄ν°λ₯Ό μ μ₯νλ ꡬ쑰
μ£Όμ λμ
push(value)
: λ°μ΄ν°λ₯Ό μ§μ΄λ£λ μνpop()
: λ°μ΄ν°λ₯Ό λΉΌλ΄λ μνpeek(value)
: λ°μ΄ν°λ₯Ό λΉΌλ΄μ§ μμ§λ§ κ°μ₯ μ΅μλ¨μ μλ λ°μ΄ν°λ₯Ό νμΈνλ μν
νΉμ§
κ°μ ꡬ쑰μ ν¬κΈ°μ μλ£λ₯Ό μ ν΄μ§ λ°©ν₯μΌλ‘λ§ μμ μ μκ³ topμΌλ‘ μ ν κ³³μ ν΅ν΄μλ§ μ κ·Όν μ μλ€.
topμλ κ°μ₯ μμ μλ μλ£λ κ°μ₯ μ΅κ·Όμ λ€μ΄μ¨ μλ£λ₯Ό κ°λ¦¬ν€λ©° μ½μ λλ μ μλ£λ topμ΄ κ°λ¦¬ν€λ μλ£μ μμ μμ΄κ² λλ€.
μ€νμ μκ° μμμ λ°λΌ μλ£κ° μμ¬μ κ°μ₯ λ§μ§λ§μ μ½μ λ μλ£κ° κ°μ₯ λ¨Όμ μμ λλ€λ ꡬ쑰μ νΉμ§μ κ°μ§κ² λλ€.
λΉμ΄μλ μ€νμμ μμλ₯Ό μΆμΆνλ €κ³ ν λ
stack underflow
λΌκ³ νκ³ μ€νμ΄ λμΉλ κ²½μ°stack overflow
λΌκ³ νλ€.
λμ λ°©μ
νμ© μμ
μΉ λΈλΌμ°μ λ°©λ¬ΈκΈ°λ‘(λ€λ‘ κ°κΈ°) : κ°μ₯ λμ€μ μ΄λ¦° νμ΄μ§λΆν° λ€μ 보μ¬μ€
μμ λ¬Έμμ΄ λ§λ€κΈ° : κ°μ₯ λμ€μ μ λ ₯λ λ¬ΈμλΆν° μΆλ ₯
μ€ν μ·¨μ(undo) : κ°μ₯ λμ€μ μ€νλ κ²λΆν° μ€νμ μ·¨μ
νμ νκΈ°λ²
μμμ κ΄νΈ κ²μ¬
μ½λ
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Stack<Integer> stack = new Stack<>(); stack.push(1); // 1 stack.push(2); // 1 2 stack.push(3); // 1 2 3 stack.pop(); // 1 2 stack.peek(); // 2 // μ€νμ΄ λΉμ΄μλμ§ νμΈ System.out.println(stackInt.isEmpty()); // false // μ°Ύλ μΈλ±μ€μ κ° System.out.println(stackInt.search(1)); // 2
ν(queue)
FIFO(First In First Out) ννλ‘ λ°μ΄ν°λ₯Ό μ μ₯νλ ꡬ쑰
μμ 보μ₯
μ£Όμ λμ
enqueue : λ°μ΄ν°λ₯Ό μ§μ΄λ£λ μν
add(value)
: valueλ₯Ό 맨 λ€μ λ£μ. μ±κ³΅νλ©΄ true, μ€ν¨νλ©΄ μμΈ λ°μoffer(value)
: valueλ₯Ό 맨 λ€μ λ£μ. μ±κ³΅νλ©΄ true, μ€ν¨νλ©΄ false λ°ν
dequeue : λ°μ΄ν°λ₯Ό λΉΌλ΄λ μν
remove()
: 맨 μμ κ°μ λ°ν ν μ κ±°. νκ° λΉμ΄μλ€λ©΄ μμΈ λ°μ
peek()
: λ°μ΄ν°λ₯Ό λΉΌλ΄μ§ μμ§λ§ μ΄μ κ³§ κΊΌλ΄κ² λ λ°μ΄ν°λ₯Ό νμΈνλ μν
νΉμ§
μ ν΄μ§ ν κ³³(top)μ ν΅ν΄ μ½μ , μμ κ° μ΄λ£¨μ΄μ§λ μ€νκ³Όλ λ¬λ¦¬ νλ νμͺ½ λμμ μ½μ μμ μ΄, λ€λ₯Έ μͺ½ λμμ μμ μμ μ΄ μμͺ½μΌλ‘ μ΄λ£¨μ΄μ§λ€.
μμ μ°μ°λ§ μνλλ κ³³μ
νλ‘ νΈ(front)
, μ½μ μ°μ°λ§ μ΄λ£¨μ΄μ§λ κ³³μ리μ΄(rear)
λ‘ μ νμ¬ κ°κ°μ μ°μ° μμ λ§ μνλλ€.μ¬κΈ°μ νμ 리μ΄μμ μ΄λ£¨μ΄μ§λ μ½μ μ°μ°μ
μΈν(enQueue)
, νλ‘ νΈμμ μ΄λ£¨μ΄μ§λ μμ μ°μ°μλν(dnQueue)
λΌκ³ λΆλ¦.
λμ λ°©μ
νμ© μμ
μ°μ μμκ° κ°μ μμ μμ½ (νλ¦°ν°μ μΈμ λκΈ°μ΄)
μν μ 무
μ½μΌν° κ³ κ° λκΈ°μκ°
νλ‘μΈμ€ κ΄λ¦¬
λλΉ μ°μ νμ(BFS)
μΊμ ꡬν
μ½λ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Queue<μλ£ν> q = new LinkedList<>(); Queue<Integer> q = new LinkedList<>(); q.add(1); // μ±κ³΅μ true, μ€ν¨μ exception λ°ν q.offer(1); // μ±κ³΅μ true, μ€ν¨μ false λ°ν q.remove(); // μμ λ value / 곡백 νμ΄λ©΄ Exception λ°μ q.remove(1); // ν΄λΉ κ° μμ ν true, μ‘΄μ¬νμ§ μμΌλ©΄ false λ°ν q.poll(); // μμ λ value, 곡백 νμ΄λ©΄ null λ°ν q.element(); // ν headμ μμΉν value / 곡백 νμ΄λ©΄ Exception λ°μ q.peek(); // ν headμ μμΉν value / 곡백 νμ΄λ©΄ null λ°ν q.clear(); // ν μ΄κΈ°ν q.size(); // ν μ¬μ΄μ¦ λ°ν q.contains(1); // ν΄λΉ κ°μ΄ μ‘΄μ¬νλ©΄ true / μ‘΄μ¬νμ§ μμΌλ©΄ false λ°ν q.isEmpty(); // 곡백 νμ΄λ©΄ ture / μλλ©΄ false λ°ν
μλ¬
StackOverflowError
: μ€ν λ©λͺ¨λ¦¬ 곡κ°μ λ€ μΌμ λ λ°μνλ μλ¬
β: λλΆλΆ μ¬κ·ν¨μ(recursive function)
μμ νμΆ λͺ»ν΄μ λ°μ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Fibonacci {
public static int recurFibo(int n) {
if (n <= 1) {
return n;
} else {
return recurFibo(n - 1) + recurFibo(n - 2);
}
}
public static void main(String[] args) {
int n = 10;
for (int i = 0; i < n; i++) {
System.out.print(recurFibo(i) + " ");
}
}
}
νΌλ³΄λμΉ μμ΄μμ nλ²μ§Έ νλͺ©μ΄ μ΄λ€ κ°μ κ°μ§λμ§λ₯Ό κ³μ°νλ ν¨μλ‘ μ¬κ· ν¨μμ μ νμ μΈ μλ₯Ό μ½λλ‘ κ°μ Έμλ€.
recurFibo()
λΌλ ν¨μλ₯Ό λ΄λΆμμλ νΈμΆμ νκ³ μλ€. μ΄λ κ² μκΈ° μμ μ ν¨μ λ΄λΆμμ νΈμΆνλ κ²μ μ¬κ·ν¨μλΌκ³ νκ³ μ€μν λΆλΆμ if(n<=1)
μ²λΌ νμΆμ‘°κ±΄μ΄ μ‘΄μ¬νλ€.
νμ§λ§ κ°λ°μ νλ€ νμΆ μ‘°κ±΄μ μ κΈ° κΉλ¨Ήκ±°λ μλͺ» μ μ΄μ ν¨μ νΈμΆμ μμνμ§λ§ λμ΄ μ‘΄μ¬νμ§ μμ μ€ν λ©λͺ¨λ¦¬λ₯Ό λ€ μΌμ λ StackOverflowError
κ° λ°μνλ€.
β : μ¦, ν΄κ²° λ°©λ²μ νμΆ μ‘°κ±΄μ μ λͺ μνλ©΄ λλ€!
OutOfMemoryError
: Javaμ ν(heap) λ©λͺ¨λ¦¬λ₯Ό λ€ μΌμ λ λ°μ
μ¬κΈ°μ ν(heap) λ©λͺ¨λ¦¬λ κ°μ²΄κ° κ±°μ£Όνλ λ©λͺ¨λ¦¬ μμμ
β : λ΄λΆμ μΌλ‘ νλ₯Ό μ¬μ©νλλ° νμ λ°μ΄ν°κ° κ³μ μμ΄κΈ°λ§ νλ€λ©΄ λ°μνλ€.
β : ν΄κ²° λ°©λ²μ ν μ¬μ΄μ¦λ₯Ό κ³ μ νλ©΄ λλ€.
νμ§λ§ νκ° λ€ μ°¬λ€λ©΄ μ΄λ»κ² ν΄κ²° ν΄μΌλ κΉ?
μμΈ(exception) λμ§κΈ°
νΉλ³ν κ°(null or false) λ°ν
μ±κ³΅ν λκΉμ§(νμ 곡κ°μ΄ μκΈΈ λκΉμ§) μμν μ€λ λ λΈλ½(λκΈ°)
μ νλ μκ°λ§ λΈλ½(block)λκ³ κ·Έλλ μλλ©΄ ν¬κΈ°
Javaμμ μ΄λ° 4κ°μ§ λ°©μμ ꡬνν λͺλͺ ν΄λμ€λ€μ΄ μλλ° κ·Έ μ€μ νλκ° LinkedBlockingQueue
μ΄λ€.