flowchart TD
A[Sort items by greedy key] --> B[Initialize result]
B --> C[Iterate items in order]
C --> D{Selection condition valid}
D -- Yes --> E[Select item]
D -- No --> F[Skip item]
E --> G[Update state]
F --> H{More items}
G --> H
H -- Yes --> C
H -- No --> I[Return selected set]
sequenceDiagram
participant S as Sorted items
participant R as Result
participant Rule as Greedy rule
loop item by item
S->>Rule: evaluate candidate
Rule-->>R: accept reject
end
# [Greedy 템플릿: 아키텍트 버전]# Use Case: 최적 부분 구조, 탐욕적 선택 속성# Components: Sorting (대부분), Selection Logic# Constraint: 매 순간 최선의 선택이 전체 최적해 보장해야 함defgreedy_template(items):# 1. 정렬 레이어 (Sorting Layer)# - 그리디 기준에 따라 정렬items.sort(key=lambdax:x[1])# 예: 종료 시간 기준# 2. 초기화 (Initialization)result=[]last_selected=None# 3. 순차 선택 (Sequential Selection)foriteminitems:# 4. 선택 조건 (Selection Condition)# - 탐욕적 규칙에 부합하는지 확인ifis_valid(item,last_selected):result.append(item)last_selected=itemreturnresultdefis_valid(item,last_selected):# 선택 가능 여부 판단 로직iflast_selectedisNone:returnTruereturnitem[0]>=last_selected[1]# 예: 시작 시간 >= 이전 종료 시간