πŸ‘¨πŸ»β€πŸ’»μžλ£Œκ΅¬μ‘°λž€ λ¬΄μ—‡μΌκΉŒ?

μœ€μ€€μƒΒ·2024λ…„ 11μ›” 5일
1

취업을 ν•˜μ—¬ 싀무λ₯Ό κ²½ν—˜ν•˜κ³  싢은 μš”μ¦˜ μŠ€νŽ™λ„ μ—†κ³  μš”μ¦˜ 자쑴감이 떨어지고 λΆˆμ•ˆν•œ μ‹œκΈ°μΈ 아무것도 μ•„λ‹Œ λ‚˜λ₯Ό μœ„ν•΄ μ’€ 더 μ„±μ‹€ν•˜κ³  μ—΄μ‹¬νžˆ μ‚΄κΈ°μœ„ν•΄ 글을 μ“΄λ‹€. μŠ€ν‹°λΈŒ μž‘μŠ€λΆ„κ»˜μ„œ λ§μ”€ν•˜μ‹  "μ–΄μ œλ₯Ό λ’€λŒμ•„λ³΄λŠ” 건 κ·Έλ§Œν•˜μž. κ·Έ λŒ€μ‹  내일을 λ°œμ „μ‹œμΌœ λ‚˜κ°€μž." λΌλŠ” 말을 μƒκ°ν•˜λ©° λ‚˜λŠ” 더 λ‚˜μ€ 내일을 μœ„ν•΄ λ°œμ „μ‹œμΌœ λ‚˜κ°€λŠ”κ²ƒμ΄λ‹€! μ·¨μ—…ν•˜κ³ μ‹Άλ‹€μ•„



μžλ£Œκ΅¬μ‘°λž€ 무엇?

ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 효율적인 데이터 관리와 처리λ₯Ό μœ„ν•΄ ν•„μˆ˜μ μœΌλ‘œ μ•Œμ•„μ•Ό ν•˜λŠ” κ°œλ…μ΄ λ°”λ‘œ 자료ꡬ쑰라고 μƒκ°ν•œλ‹€.
μžλ£Œκ΅¬μ‘°λŠ” 데이터λ₯Ό μ €μž₯ν•˜κ³  μ‘°μ§ν™”ν•˜λŠ” 방법을 μ˜λ―Έν•˜κ³  μ•Œκ³ λ¦¬μ¦˜κ³Ό κ²°ν•©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆλ‹€.
이 κΈ€μ—μ„œλŠ” 자료ꡬ쑰의 κΈ°λ³Έ κ°œλ…κ³Ό λͺ‡ 가지 μ£Όμš” 자료ꡬ쑰λ₯Ό μ‚΄νŽ΄λ³Ό 것이닀.


1. 자료ꡬ쑰의 ν•„μš”μ„±

μžλ£Œκ΅¬μ‘°λŠ” λ‹€μ–‘ν•œ ν˜•νƒœμ˜ 데이터λ₯Ό 적절히 μ‘°μ§ν™”ν•˜μ—¬ 더 효율적인 연산을 κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€. 예λ₯Ό λ“€μ–΄ νŠΉμ • 데이터λ₯Ό λΉ λ₯΄κ²Œ 검색해야 ν•  λ•Œ μ ν•©ν•œ 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λ©΄ 검색 속도λ₯Ό 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€.
효율적인 자료ꡬ쑰λ₯Ό μ„ νƒν•¨μœΌλ‘œμ¨ μ‹œκ°„κ³Ό λ©”λͺ¨λ¦¬λ₯Ό μ ˆμ•½ν•˜κ³  ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆλ‹€.


2. 자료ꡬ쑰의 μ’…λ₯˜

2-1 λ°°μ—΄ (Array)

배열은 같은 데이터 νƒ€μž…μ˜ μš”μ†Œλ“€μ„ μ—°μ†λœ λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯ν•˜λŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€. 각 μš”μ†ŒλŠ” κ³ μœ ν•œ 인덱슀λ₯Ό 톡해 μ ‘κ·Όν•  수 μžˆλ‹€.

μž₯점

  • λΉ λ₯Έ μ ‘κ·Ό 속도: 인덱슀λ₯Ό 톡해 O(1) μ‹œκ°„ λ³΅μž‘λ„λ‘œ λΉ λ₯΄κ²Œ νŠΉμ • μš”μ†Œμ— μ ‘κ·Όν•  수 μžˆλ‹€.
  • κ°„λ‹¨ν•œ ꡬ쑰: λ©”λͺ¨λ¦¬ ꡬ쑰가 λ‹¨μˆœν•˜κ³  μ΄ν•΄ν•˜κΈ° μ‰¬μ›Œ 자주 μ‚¬μš©λœλ‹€.

단점

  • κ³ μ •λœ 크기: μ„ μ–Έ μ‹œ 크기λ₯Ό 지정해야 ν•˜λ―€λ‘œ 크기 변경이 μ–΄λ ΅λ‹€.
  • λΉ„νš¨μœ¨μ μΈ μ‚½μž…/μ‚­μ œ: 쀑간에 데이터λ₯Ό μ‚½μž…ν•˜κ±°λ‚˜ μ‚­μ œν•  κ²½μš°μ— 데이터λ₯Ό 이동해야 ν•˜λ―€λ‘œ μ‹œκ°„ λ³΅μž‘λ„κ°€ O(n)이닀.

2-2 μ—°κ²° 리슀트 (Linked List)

μ—°κ²° λ¦¬μŠ€νŠΈλŠ” 각각의 λ…Έλ“œκ°€ 데이터와 λ‹€μŒ λ…Έλ“œλ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터λ₯Ό ν¬ν•¨ν•˜λŠ” ꡬ쑰이닀. λ…Έλ“œλ₯Ό λ™μ μœΌλ‘œ μΆ”κ°€ 및 μ‚­μ œν•  수 μžˆμ–΄ μœ μ—°μ„±μ΄ λ†’λ‹€.

μž₯점

  • 동적 크기 쑰절: ν•„μš”μ— 따라 크기λ₯Ό μœ μ—°ν•˜κ²Œ λ³€κ²½ν•  수 μžˆλ‹€.
  • 효율적인 μ‚½μž…/μ‚­μ œ: 쀑간 μ‚½μž… 및 μ‚­μ œ μ‹œ 데이터λ₯Ό 이동할 ν•„μš”κ°€ μ—†μ–΄ O(1) μ‹œκ°„ λ³΅μž‘λ„λ‘œ μ²˜λ¦¬ν•  수 μžˆλ‹€.

단점

  • 느린 μ ‘κ·Ό 속도: λ°°μ—΄κ³Ό 달리 인덱슀둜 μ ‘κ·Όν•  수 μ—†κΈ° λ•Œλ¬Έμ— νŠΉμ • λ…Έλ“œμ— μ ‘κ·Όν•˜λ €λ©΄ μ²˜μŒλΆ€ν„° μˆœνšŒν•΄μ•Ό ν•œλ‹€.
  • μΆ”κ°€ λ©”λͺ¨λ¦¬ ν•„μš”: 각 λ…Έλ“œλ§ˆλ‹€ λ‹€μŒ λ…Έλ“œλ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터λ₯Ό μ €μž₯ν•΄μ•Ό ν•˜λ―€λ‘œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ μ¦κ°€ν•œλ‹€.

2-3 μŠ€νƒ (Stack)

μŠ€νƒμ€ 데이터λ₯Ό ν•œμͺ½ λμ—μ„œλ§Œ μ‚½μž…ν•˜κ³  μ œκ±°ν•˜λŠ” 자료ꡬ쑰둜, LIFO(Last In, First Out) 원칙을 λ”°λ₯Έλ‹€. λŒ€ν‘œμ μœΌλ‘œ ν•¨μˆ˜ 호좜, 되돌리기 κΈ°λŠ₯ 등에 μ‚¬μš©λœλ‹€.

μž₯점

  • κ°„λ‹¨ν•œ κ΅¬ν˜„: μ‚½μž… 및 μ‚­μ œκ°€ ν•œμͺ½ λμ—μ„œλ§Œ μ΄λ λ‚˜κΈ° λ•Œλ¬Έμ— ꡬ쑰가 λ‹¨μˆœν•˜λ‹€.
  • λΉ λ₯Έ μ‚½μž…/μ‚­μ œ: O(1) μ‹œκ°„ λ³΅μž‘λ„λ‘œ μ‚½μž…κ³Ό μ‚­μ œλ₯Ό ν•  수 μžˆλ‹€.

단점

  • μ œν•œλœ μ ‘κ·Ό 방식: λ§ˆμ§€λ§‰μ— μ‚½μž…λœ μš”μ†Œλ§Œ μ ‘κ·Ό κ°€λŠ₯ν•˜μ—¬ 쀑간 μš”μ†Œλ₯Ό μ ‘κ·Όν•  수 μ—†λ‹€.

2-4 큐 (Queue)

νλŠ” FIFO(First In, First Out) 원칙을 λ”°λ₯΄λŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€. 데이터λ₯Ό μ•žμͺ½μ—μ„œ μ œκ±°ν•˜κ³  λ’€μͺ½μ— μ‚½μž…ν•œλ‹€. λŒ€κΈ°μ—΄κ³Ό 같은 ꡬ쑰에 μ ν•©ν•˜λ‹€.

μž₯점

  • μˆœμ„œ μœ μ§€: λ¨Όμ € λ“€μ–΄μ˜¨ 데이터가 λ¨Όμ € λ‚˜κ°€λŠ” ꡬ쑰둜, μˆœμ„œκ°€ μ€‘μš”ν•œ μž‘μ—…μ— μœ λ¦¬ν•˜λ‹€.
  • λΉ λ₯Έ μ‚½μž…/μ‚­μ œ: μ‚½μž…κ³Ό μ‚­μ œκ°€ μ–‘μͺ½ λμ—μ„œλ§Œ μΌμ–΄λ‚˜λ―€λ‘œ O(1) μ‹œκ°„ λ³΅μž‘λ„λ‘œ νš¨μœ¨μ μ΄λ‹€.

단점

  • μ œν•œλœ μ ‘κ·Ό 방식: 쀑간에 μžˆλŠ” μš”μ†Œμ— 직접 μ ‘κ·Όν•  수 μ—†λ‹€.

2-5 트리 (Tree)

νŠΈλ¦¬λŠ” 계측 ꡬ쑰λ₯Ό κ°€μ§€λŠ” λΉ„μ„ ν˜• 자료ꡬ쑰둜, λ…Έλ“œ κ°„ λΆ€λͺ¨-μžμ‹ 관계가 μ‘΄μž¬ν•œλ‹€. 이진 트리, AVL 트리, B-트리 λ“± λ‹€μ–‘ν•œ ν˜•νƒœκ°€ 있으며 데이터 ꡬ쑰와 μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œμ—μ„œ 자주 μ‚¬μš©λœλ‹€.

μž₯점

  • λΉ λ₯Έ 탐색: μ •λ ¬λœ 트리 κ΅¬μ‘°μ—μ„œλŠ” μ›ν•˜λŠ” 데이터λ₯Ό λΉ λ₯΄κ²Œ 탐색할 수 μžˆλ‹€. 예λ₯Ό λ“€λ©΄ 이진 탐색 νŠΈλ¦¬λŠ” O(log n) μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 가진닀.
  • 계측적 데이터 ν‘œν˜„: 트리 ꡬ쑰λ₯Ό 톡해 κ³„μΈ΅μ μœΌλ‘œ 데이터λ₯Ό λ‚˜νƒ€λ‚Ό 수 μžˆμ–΄ 파일 μ‹œμŠ€ν…œμ΄λ‚˜ 쑰직도 ν‘œν˜„μ— μ ν•©ν•˜λ‹€.

단점

  • λ³΅μž‘ν•œ κ΅¬ν˜„: μ‚½μž…, μ‚­μ œ, κ· ν˜• 쑰정이 λ³΅μž‘ν•  수 있고 λ©”λͺ¨λ¦¬μ™€ μ—°μ‚° μ„±λŠ₯이 μš”κ΅¬λœλ‹€.
  • λΉ„μš©μ΄ 많이 λ“œλŠ” κ· ν˜• μœ μ§€: μžκ°€ κ· ν˜• 트리(BST)의 경우 μ‚½μž…κ³Ό μ‚­μ œ μ‹œ κ· ν˜•μ„ λ§žμΆ”κΈ° μœ„ν•΄ μΆ”κ°€ 연산이 ν•„μš”ν•˜λ‹€.

2-6 κ·Έλž˜ν”„ (Graph)

κ·Έλž˜ν”„λŠ” λ…Έλ“œ(정점)와 κ·Έ λ…Έλ“œλ“€μ„ μ—°κ²°ν•˜λŠ” κ°„μ„ (엣지)으둜 이루어진 μžλ£Œκ΅¬μ‘°μ΄λ‹€. λ°©ν–₯ κ·Έλž˜ν”„, 무방ν–₯ κ·Έλž˜ν”„, κ°€μ€‘μΉ˜ κ·Έλž˜ν”„ λ“± λ‹€μ–‘ν•œ μ’…λ₯˜κ°€ 있고 λ„€νŠΈμ›Œν¬, 경둜찾기 λ“±μ˜ λ¬Έμ œμ— ν™œμš©λœλ‹€.

μž₯점

  • λ³΅μž‘ν•œ 관계 ν‘œν˜„ κ°€λŠ₯: κ·Έλž˜ν”„λŠ” λ„€νŠΈμ›Œν¬, 지도 λ“± λ³΅μž‘ν•œ 데이터 κ°„μ˜ 관계λ₯Ό ν‘œν˜„ν•˜λŠ”λ° μœ λ¦¬ν•˜λ‹€.
  • μœ μ—°ν•œ ꡬ쑰: μž₯점과 κ°„μ„ μ˜ 관계λ₯Ό 자유둭게 μ„€μ •ν•  수 μžˆμ–΄ λ‹€μ–‘ν•œ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€.

단점

  • 높은 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰: λ…Έλ“œμ™€ 간선을 λͺ¨λ‘ μ €μž₯ν•΄μ•Ό ν•˜λ―€λ‘œ λ©”λͺ¨λ¦¬ μ†Œλͺ¨κ°€ 크닀.
  • λ³΅μž‘ν•œ κ΅¬ν˜„: 경둜 탐색, μ΅œλ‹¨ 거리 λ“± λ‹€μ–‘ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄ ν•„μš”ν•΄ κ΅¬ν˜„μ΄ λ³΅μž‘ν•  수 μžˆλ‹€.

이처럼 각각의 μžλ£Œκ΅¬μ‘°λŠ” νŠΉμ •ν•œ μž₯점과 단점을 가지고 μžˆμœΌλ―€λ‘œ μš©λ„μ— 따라 졜적의 자료ꡬ쑰λ₯Ό μ„ νƒν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

profile
ν˜λŸ¬κ°€λ˜ μ›ν•˜λŠ” λ°©ν–₯으둜

0개의 λŒ“κΈ€