λͺ©λ‘πŸ‘©‍πŸ’» 컴퓨터 ꡬ쑰 (110)

😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[Coding Interview University] νž™ / μš°μ„ μˆœμœ„ 큐 / 이진 νž™ : 이둠 및 κ΅¬ν˜„

🌝 νž™(heap) 자료ꡬ쑰 : μ΅œλŒ€κ°’ 및 μ΅œμ†Œκ°’μ„ μ°Ύμ•„λ‚΄λŠ” 연산을 λΉ λ₯΄κ²Œ ν•˜κΈ° μœ„ν•΄ κ³ μ•ˆλœ μ™„μ „ μ΄μ§„νŠΈλ¦¬ (complete binary tree) λ₯Ό 기본으둜 ν•œ 자료ꡬ쑰 : Aκ°€ B의 λΆ€λͺ¨ λ…Έλ“œμ΄λ©΄, A의 ν‚€ κ°’κ³Ό B의 ν‚€ κ°’ μ‚¬μ΄μ—λŠ” λŒ€μ†Œ 관계가 μ„±λ¦½λœλ‹€ : μ™„μ „ 이진 트리 : λͺ¨λ“  λ…Έλ“œμ— μ €μž₯된 값은 μžμ‹ λ…Έλ“œμ— μ €μž₯된 값보닀 ν¬κ±°λ‚˜ μž‘μ•„μ•Ό ν•˜λŠ” 자료ꡬ쑰 μ΅œλŒ€ νž™ : λΆ€λͺ¨ λ…Έλ“œμ˜ ν‚€ 값이 μžμ‹ λ…Έλ“œμ˜ ν‚€ 값보닀 항상 큰 νž™ 가짐 left : i * 2 + 1 right : i * 2 + 2 parent : (i - 1) / 2 μ΅œμ†Œ νž™ : λΆ€λͺ¨ λ…Έλ“œμ˜ ν‚€ 값이 μžμ‹ λ…Έλ“œμ˜ ν‚€ 값보닀 항상 μž‘μ€ νž™ 가짐 🌝 νž™(heap) μ£Όμš” λ©”μ„œλ“œ peek() : μ΅œλŒ€/μ΅œμ†Œκ°’ 리턴 size() : νž™ μ‚¬μ΄μ¦ˆ 리턴 ..

[Coding Interview University] 이진 탐색 트리 : 이둠 및 κ΅¬ν˜„

🫧 μ΄μ§„νƒμƒ‰νŠΈλ¦¬ : “λͺ¨λ“  μ™Όμͺ½ μžμ‹λ“€ ≤ n < λͺ¨λ“  였λ₯Έμͺ½ μžμ‹λ“€” 속성은 λͺ¨λ“  λ…Έλ“œ n에 λŒ€ν•΄μ„œ λ°˜λ“œμ‹œ 참이어야 함 : λͺ¨λ“  λ…Έλ“œμ— λŒ€ν•΄μ„œ μ™Όμͺ½ μžμ‹λ“€μ˜ 값이 ν˜„μž¬ λ…Έλ“œ 값보닀 μž‘κ±°λ‚˜ 같도둝 ν•˜κ³ , 였λ₯Έμͺ½ μžμ‹λ“€ 값은 ν˜„μž¬ λ…Έλ“œμ˜ 값보닀 λ°˜λ“œμ‹œ 컀야함 🫧 κ· ν˜• vs λΉ„κ· ν˜• κ· ν˜• λ ˆλ“œ λΈ”λž™ 트리 AVL 트리 🫧 μ™„μ „μ΄μ§„νŠΈλ¦¬ : 트리의 λͺ¨λ“  λ†’μ΄μ—μ„œ λ…Έλ“œκ°€ 꽉 μ°¨ μžˆλŠ” 이진 트리 : λ§ˆμ§€λ§‰ λ‹¨κ³„λŠ” 꽉 μ°¨ μžˆμ§€ μ•Šμ•„λ„ λ˜μ§€λ§Œ λ…Έλ“œκ°€ μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ μ±„μ›Œμ Έμ•Ό 함 🫧 μ „μ΄μ§„νŠΈλ¦¬ : λͺ¨λ“  λ…Έλ“œμ˜ μžμ‹μ΄ μ—†κ±°λ‚˜ μ •ν™•νžˆ 두 개 μžˆλŠ” 경우 : μžμ‹μ΄ ν•˜λ‚˜λ§Œ μžˆλŠ” λ…Έλ“œκ°€ μ‘΄μž¬ν•΄μ„œλŠ” μ•ˆλ¨ 🫧 ν¬ν™”μ΄μ§„νŠΈλ¦¬ : μ „ 이진 νŠΈλ¦¬μ΄λ©΄μ„œ μ™„μ „ 이진 트리인 경우 : λͺ¨λ“  말단 λ…Έλ“œλŠ” 같은 높이에 μžˆμ–΄μ•Ό ν•˜λ©°, λ§ˆμ§€λ§‰ λ‹¨κ³„μ—μ„œ ..

[Coding Interview University] 트리 : 이둠 및 κ΅¬ν˜„

🫧 트리 : ν•˜λ‚˜μ˜ 루트 μ½”λ“œλ₯Ό 가진닀 : 루트 λ…Έλ“œλŠ” 0개 μ΄μƒμ˜ μžμ‹ λ…Έλ“œλ₯Ό κ°–κ³  μžˆλ‹€ : νŠΈλ¦¬μ—λŠ” 사이클 μ‘΄μž¬ν•  수 μ—†λ‹€ : λ…Έλ“œλ“€μ€ νŠΉμ • μˆœμ„œλ‘œ λ‚˜μ—΄λ  μˆ˜λ„ 있고 그럴 수 없을 μˆ˜λ„ μžˆλ‹€ : 각 λ…Έλ“œλŠ” μ–΄λ–€ μžλ£Œν˜•μœΌλ‘œλ„ ν‘œν˜„μ΄ κ°€λŠ₯ν•˜λ‹€ λ…Έλ“œ(node) 트리의 κ΅¬μ„±μš”μ†Œμ— ν•΄λ‹Ήν•˜λŠ” A, B, C, D, E, F와 같은 μš”μ†Œ κ°„μ„ (edge) λ…Έλ“œμ™€ λ…Έλ“œλ₯Ό μ—°κ²°ν•˜λŠ” μ—°κ²°μ„  루트 λ…Έλ“œ(root node) 트리 κ΅¬μ‘°μ—μ„œ μ΅œμƒμœ„μ— μ‘΄μž¬ν•˜λŠ” A와 같은 λ…Έλ“œ 단말 λ…Έλ“œ(terminal node, leaf node) μ•„λž˜λ‘œ 또 λ‹€λ₯Έ λ…Έλ“œκ°€ μ—°κ²°λ˜μ–΄ μžˆμ§€ μ•Šμ€ E, F, C, D와 같은 λ…Έλ“œ λ‚΄λΆ€ λ…Έλ“œ(internal node),λΉ„ 단말 λ…Έλ“œ(non-terminal node) 단말 λ…Έλ“œλ₯Ό μ œμ™Έν•œ λͺ¨λ“  λ…Έλ“œλ‘œ A, B..

[Coding Interview University] λΉ„νŠΈ μ—°μ‚° : 이둠 및 κ΅¬ν˜„

🫧 λΉ„νŠΈ μ‘°μž‘ : 0s λŠ” λͺ¨λ“  λΉ„νŠΈκ°€ 0 인 κ°’ : 1s λŠ” λͺ¨λ“  λΉ„νŠΈκ°€ 1 인 κ°’ : 연산듀이 λΉ„νŠΈ λ‹¨μœ„λ‘œ 이루어 진닀! : ν•œ λΉ„νŠΈμ—μ„œ μΌμ–΄λ‚˜λŠ” 일이 λ‹€λ₯Έ λΉ„νŠΈμ— μ–΄λ–€ 영ν–₯도 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€ 🫧 2의 λ³΄μˆ˜μ™€ 음수 : μ»΄ν“¨ν„°λŠ” 일반적으둜 μ •μˆ˜λ₯Ό μ €μž₯ν•  λ•Œ 2의 보수 ν˜•νƒœλ‘œ μ €μž₯ : μ–‘μˆ˜λ₯Ό ν‘œν˜„ν•  땐 문제 μ—†μŒ : 음수λ₯Ό ν‘œν˜„ν•  땐 κ·Έ 수의 μ ˆλŒ“κ°’μ— λΆ€ν˜ΈλΉ„νŠΈλ₯Ό 1둜 μ„ΈνŒ…ν•œ λ’€ 2의 보수λ₯Ό μ·¨ν•œ ν˜•νƒœλ‘œ ν‘œν˜„ν•¨ : NλΉ„νŠΈ μˆ«μžμ— λŒ€ν•œ 2의 λ³΄μˆ˜λŠ” 2^N 에 λŒ€ν•œ λ³΄μˆ˜κ°’κ³Ό κ°™μŒ (N은 λΆ€ν˜ΈλΉ„νŠΈλ₯Ό λΊ€ λ‚˜λ¨Έμ§€ 값을 ν‘œν˜„ν•  λ•Œ μ‚¬μš©λ˜λŠ” λΉ„νŠΈμ˜ 개수) : 2의 보수λ₯Ό ν‘œν˜„ν•˜λŠ” λ‹€λ₯Έ 방법은 μ–‘μˆ˜λ‘œ ν‘œν˜„λœ 2μ§„μˆ˜λ₯Ό 뒀집은 λ’€ 1을 더해 μ£ΌλŠ” 것 🫧 μ‚°μˆ  우츑 μ‹œν”„νŠΈ VS 논리 우츑 μ‹œν”„νŠΈ μ‚°μˆ  우츑 μ‹œν”„νŠΈ 기본적으둜 2..

[Coding Interview University] 이진탐색 : 이둠 및 κ΅¬ν˜„

🫧 트리 : ν•˜λ‚˜μ˜ 루트 μ½”λ“œλ₯Ό 가진닀 : 루트 λ…Έλ“œλŠ” 0개 μ΄μƒμ˜ μžμ‹ λ…Έλ“œλ₯Ό κ°–κ³  μžˆλ‹€ : νŠΈλ¦¬μ—λŠ” 사이클 μ‘΄μž¬ν•  수 μ—†λ‹€ : λ…Έλ“œλ“€μ€ νŠΉμ • μˆœμ„œλ‘œ λ‚˜μ—΄λ  μˆ˜λ„ 있고 그럴 수 없을 μˆ˜λ„ μžˆλ‹€ : 각 λ…Έλ“œλŠ” μ–΄λ–€ μžλ£Œν˜•μœΌλ‘œλ„ ν‘œν˜„μ΄ κ°€λŠ₯ν•˜λ‹€ 🫧 μ΄μ§„νŠΈλ¦¬ : 각 λ…Έλ“œκ°€ μ΅œλŒ€ 두 개의 μžμ‹μ„ κ°–λŠ” 트리 🫧 μ΄μ§„νƒμƒ‰νŠΈλ¦¬ : “λͺ¨λ“  μ™Όμͺ½ μžμ‹λ“€ ≤ n < λͺ¨λ“  였λ₯Έμͺ½ μžμ‹λ“€” 속성은 λͺ¨λ“  λ…Έλ“œ n에 λŒ€ν•΄μ„œ λ°˜λ“œμ‹œ 참이어야 함 : λͺ¨λ“  λ…Έλ“œμ— λŒ€ν•΄μ„œ μ™Όμͺ½ μžμ‹λ“€μ˜ 값이 ν˜„μž¬ λ…Έλ“œ 값보닀 μž‘κ±°λ‚˜ 같도둝 ν•˜κ³ , 였λ₯Έμͺ½ μžμ‹λ“€ 값은 ν˜„μž¬ λ…Έλ“œμ˜ 값보닀 λ°˜λ“œμ‹œ 컀야함 🫧 κ· ν˜• vs λΉ„κ· ν˜• κ· ν˜• λ ˆλ“œ λΈ”λž™ 트리 AVL 트리 🫧 μ™„μ „μ΄μ§„νŠΈλ¦¬ : 트리의 λͺ¨λ“  λ†’μ΄μ—μ„œ λ…Έλ“œκ°€ 꽉 μ°¨ μžˆλŠ” 이진 트리 : λ§ˆμ§€λ§‰ λ‹¨κ³„λŠ” 꽉 μ°¨ ..

[Coding Interview University] ν•΄μ‹œν…Œμ΄λΈ” : 이둠 및 κ΅¬ν˜„

🫧 ν•΄μ‹œν…Œμ΄λΈ” (hash table) : 효율적인 탐색을 μœ„ν•œ μžλ£Œκ΅¬μ‘°λ‘œμ„œ, keyλ₯Ό value 에 λŒ€μ‘μ‹œν‚΄ : μ΅œμ•…μ˜ 경우 O(n) // n은 ν‚€μ˜ 개수 : μ΅œμ„ μ˜ 경우 O(1) 🫧 μ—°κ²°λ¦¬μŠ€νŠΈμ™€ ν•΄μ‹œ μ½”λ“œ ν•¨μˆ˜λ‘œ κ΅¬ν˜„ 1) ν‚€μ˜ ν•΄μ‹œ μ½”λ“œ 계산 ν‚€μ˜ μžλ£Œν˜•μ€ 보톡 int or long ν‚€μ˜ 개수 λ¬΄ν•œ (int λŠ” μœ ν•œ) 2) hash(key) % array_length λ°©μ‹μœΌλ‘œ ν•΄μ‹œ μ½”λ“œ μ΄μš©ν•΄ λ°°μ—΄μ˜ 인덱슀 ꡬ함 μ„œλ‘œ λ‹€λ₯Έ 두 개의 ν•΄μ‹œ μ½”λ“œκ°€ 같은 인덱슀 가리킬 수 있음 3) λ°°μ—΄μ˜ 각 μΈλ±μŠ€μ—λŠ” 킀와 κ°’μœΌλ‘œ 이루어진 μ—°κ²°λ¦¬μŠ€νŠΈ 쑴재 킀와 값을 ν•΄λ‹Ή μΈλ±μŠ€μ— μ €μž₯ (λ°˜λ“œμ‹œ μ—°κ²°λ¦¬μŠ€νŠΈ 이용!) πŸ’₯ 좩돌 : μ„œλ‘œ λ‹€λ₯Έ 두 개의 ν‚€κ°€ 같은 μ½”λ“œλ₯Ό κ°€λ¦¬ν‚€κ±°λ‚˜, μ„œλ‘œ λ‹€λ₯Έ 두 개의 ν•΄μ‹œ μ½”λ“œκ°€ 같은 인덱슀λ₯Ό..