πŸ“™ 뢁클럽

IT 5λΆ„ μž‘ν•™μ‚¬μ „ μ—ν”Όμ†Œλ“œ 26~29

rigood 2023. 9. 2. 16:37

였늘 읽은 λ²”μœ„: μ—ν”Όμ†Œλ“œ 26~29

 

πŸ˜€ μ±…μ—μ„œ κΈ°μ–΅ν•˜κ³  싢은 λ‚΄μš©μ„ μ¨λ³΄μ„Έμš”.

 

μ—ν”Όμ†Œλ“œ26 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ΄ 뭐죠?

- μ‹œκ°„λ³΅μž‘λ„λŠ” κ°™μœΌλ©΄μ„œ μ„±λŠ₯은 λ‹€λ₯Έ 3κ°€μ§€ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ„ μ•Œμ•„λ³΄μž.

β‘  버블정렬
μ„œλ‘œ μΈμ ‘ν•œ 두 μ›μ†Œλ₯Ό λΉ„κ΅ν•˜μ—¬ 쑰건에 따라 자리λ₯Ό λ°”κΏ”λ‚˜κ°€λŠ” μ •λ ¬ 방법, ν•œ 사이클이 λλ‚˜λ©΄ λ§ˆμ§€λ§‰ μœ„μΉ˜μ— μžˆλŠ” μ›μ†Œλ₯Ό μ œμ™Έν•˜κ³  μž‘μ—…μ„ μ§„ν–‰ν•  수 있음, κ°€μž₯ λŠλ¦¬μ§€λ§Œ μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ 방법

β‘‘ 선택정렬
κ°€μž₯ μž‘μ€ 데이터 λ˜λŠ” κ°€μž₯ 큰 λ°μ΄ν„°μ˜ μœ„μΉ˜λ₯Ό λ”°λ‘œ κΈ°μ–΅ν•˜μ—¬ ν•œ 사이클에 자리λ₯Ό ν•œλ²ˆλ§Œ λ°”κΎΈλŠ” μ •λ ¬ 방법

β‘’ μ‚½μž…μ •λ ¬
μ•žμ— μžˆλŠ” 데이터λ₯Ό λ³΄λ©΄μ„œ 쑰건에 맞으면 데이터λ₯Ό λ°€μ–΄ λ„£μ–΄ λ°°μΉ˜ν•˜λŠ” μ •λ ¬ 방법

- μ„Έκ°€μ§€ μ •λ ¬ 방법 λͺ¨λ‘ μ‹œκ°„λ³΅μž‘λ„λŠ” O(N^2)으둜 κ°™λ‹€.

- λ‹¨μˆœνžˆ μΈ‘μ •ν•œ μ‹œκ°„λ³΅μž‘λ„λŠ” κ°™μ§€λ§Œ, 초기 데이터 μƒνƒœμ— 따라 μ‹€μ œ μ²˜λ¦¬μ†λ„λŠ” λ‹¬λΌμ§ˆ 수 μžˆλ‹€.

 

μ—ν”Όμ†Œλ“œ27 μŠ€νƒ, 큐가 뭐죠?

- μŠ€νƒκ³Ό νλŠ” 데이터λ₯Ό μ €μž₯ν•  λ•Œ μ‚¬μš©ν•˜λŠ” κ·œμΉ™μ΄λ‹€.

- λ°°μ—΄κ³Ό 달리, μ‹€μ œ λ¬Έλ²•μ μœΌλ‘œ κ΅¬ν˜„ν•  수 μ—†κΈ° λ•Œλ¬Έμ— 좔상 자료ꡬ쑰라고 ν•œλ‹€.

- μŠ€νƒμ€ νŒ¬μΌ€μ΄ν¬μ— λΉ„μœ ν•  수 μžˆλ‹€. μœ„μ—μ„œλΆ€ν„° 데이터λ₯Ό μŒ“κ³ , μœ„μ—μ„œλΆ€ν„° 데이터λ₯Ό λΊ€λ‹€. LIFO(Last In, First Out)의 κ·œμΉ™μ„ λ”°λ₯Έλ‹€.

- νλŠ” λ²„μŠ€μ •λ₯˜μž₯에 λΉ„μœ ν•  수 μžˆλ‹€. κ°€μž₯ λ¨Όμ € 온 μ‚¬λžŒμ΄ λ¨Όμ € λ²„μŠ€μ— νƒ€λŠ” 것과 같이, κ°€μž₯ λ¨Όμ € μž…λ ₯된 데이터가 λ¨Όμ € λΉ μ Έλ‚˜κ°„λ‹€. μœ„λ‘œ 데이터λ₯Ό μŒ“κ³ , μ•„λž˜μ—μ„œλΆ€ν„° 데이터λ₯Ό λΊ€λ‹€. μ„ μž…μ„ μΆœ, FIFO(First In, First Out)의 κ·œμΉ™μ„ λ”°λ₯Έλ‹€.

- μŠ€νƒμ€ μ›Ή λΈŒλΌμš°μ €μ˜ λ’€λ‘œκ°€κΈ° λ²„νŠΌ, Ctrl + Z μ‹€ν–‰μ·¨μ†Œ 등에 μ‚¬μš©λœλ‹€.

- νλŠ” μ‡Όν•‘λͺ° 주문처리 μ‹œμŠ€ν…œ(λ¨Όμ € λ“€μ–΄μ˜¨ 주문을 λ¨Όμ €  처리) 등에 μ‚¬μš©λœλ‹€. 

 

μ—ν”Όμ†Œλ“œ28 ν•΄μ‹œ ν…Œμ΄λΈ”μ΄ 뭐죠?

- ν•΄μ‹œ ν…Œμ΄λΈ”κ³Ό ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ ν”„λ‘œκ·Έλž¨ 속도λ₯Ό 더 λΉ λ₯΄κ²Œ λ§Œλ“€ 수 μžˆλ‹€.

- ν•΄μ‹œ ν…Œμ΄λΈ”μ΄λž€ 킀와 값을 짝지어 λͺ¨μ•„ 놓은 κ²ƒμœΌλ‘œ, 단어와 λ‹¨μ–΄μ˜ λœ»μ„ λͺ¨μ•„놓은 사전에 λΉ„μœ ν•  수 μžˆλ‹€.

- 값을 찾을 λ•Œ 배열을 μ²˜μŒλΆ€ν„° ν•˜λ‚˜μ”© 찾을 ν•„μš” 없이, ν‚€λ§Œ κ²€μƒ‰ν•˜λ©΄ 킀와 짝지어진 값을 λ°”λ‘œ 찾을 수 μžˆλ‹€.

- 배열을 μ„ ν˜•κ²€μƒ‰ ν•  λ•Œ μ‹œκ°„λ³΅μž‘λ„λŠ” O(N)μ΄μ§€λ§Œ, ν•΄μ‹œ ν…Œμ΄λΈ”μ„ μ΄μš©ν•˜λ©΄ μ‹œκ°„λ³΅μž‘λ„κ°€ O(1)이닀. ν‚€λ₯Ό κ²€μƒ‰ν•˜λŠ” 단계 ν•˜λ‚˜λ§Œ 거치기 λ•Œλ¬Έμ΄λ‹€.

- ν•΄μ‹œ ν…Œμ΄λΈ”μ„ μ–΄λ–»κ²Œ κ΅¬μ„±ν•˜λŠλƒμ— 따라 μž‘μ—… νš¨μœ¨μ„±μ΄ 달라진닀. 

- ν•΄μ‹œ ν…Œμ΄λΈ”μ€ λ°°μ—΄ ν˜•νƒœλ‘œ κ΅¬μ„±λ˜μ–΄ 있기 λ•Œλ¬Έμ— ν•΄μ‹œ ν•¨μˆ˜μ™€ ν•¨κ»˜ μ‚¬μš©ν•œλ‹€. ν•΄μ‹œ ν•¨μˆ˜λŠ” 검색 μ‹œ μ‚¬μš©ν•˜λŠ” ν‚€λ₯Ό 인덱슀둜 λ°”κΏ” μ£ΌλŠ” 역할을 ν•œλ‹€.

- ν•΄μ‹œ ν•¨μˆ˜κ°€ μ„œλ‘œ λ‹€λ₯Έ μž…λ ₯값에 λŒ€ν•΄ λ™μΌν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” 경우λ₯Ό ν•΄μ‹œ 좩돌이라고 ν•œλ‹€.

- ν•΄μ‹œ 좩돌이 생길 경우 좔가적인 처리 μž‘μ—…μ΄ ν•„μš”ν•˜λ―€λ‘œ, ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ μ‹œκ°„λ³΅μž‘λ„λŠ” 항상 O(1)이 μ•„λ‹ˆλ‹€.

 

μ—ν”Όμ†Œλ“œ29 개발자 ν•„μˆ˜ μ†Œμ–‘, 클린 μ½”λ“œ!

- 클린 μ½”λ“œλž€ μ„€λͺ…ν•˜μ§€ μ•Šμ•„λ„ μ½”λ“œμ˜ λͺ©μ κ³Ό 의미λ₯Ό μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλŠ” μ½”λ“œλ₯Ό λ§ν•œλ‹€.

1. 의미 μžˆλŠ” λ³€μˆ˜, ν•¨μˆ˜ 이름을 μ‚¬μš©ν•˜λΌ.

2. ν•¨μˆ˜ 이름은 가급적 λ™μ‚¬λ‘œ 지어라.
-> ν•¨μˆ˜κ°€ ν•˜λŠ” 일을 μ‰½κ²Œ νŒŒμ•…ν•  수 있고, ν•¨μˆ˜κ°€ 1κ°€μ§€ μ—­ν• λ§Œ ν•˜λ„λ‘ μ½”λ“œλ₯Ό 짜게 λœλ‹€.

3. λ§€κ°œλ³€μˆ˜λŠ” λ„ˆλ¬΄ 많이 μ“°μ§€ 마라.
-> λ§€κ°œλ³€μˆ˜λŠ” μ΅œλŒ€ 3개 μ΄ν•˜λ‘œ μ‚¬μš©ν•˜κ³ , λ§€κ°œλ³€μˆ˜κ°€ λ§Žμ„ 땐 Object둜 λ¬Άμ–΄μ„œ μ „λ‹¬ν•˜λ©΄ ν•¨μˆ˜λ₯Ό νŒŒμ•…ν•˜κΈ° μ‰¬μ›Œμ§„λ‹€.

4. bool 값을 인자둜 보내지 마라.
-> bool 값에 따라 μ‹€ν–‰ λΆ„κΈ°κ°€ λ‚˜λ‰˜κ²Œ 되면 ν•¨μˆ˜λŠ” 2κ°€μ§€ 일을 μ²˜λ¦¬ν•˜κ²Œ λœλ‹€.

5. μΆ•μ•½μ–΄λ₯Ό μ“°μ§€ 마라.