이 페이지는 강의 외 추가 강의예요. IV단원에서 배운 버블·선택·삽입 정렬을 게임의 인벤토리 정렬(이름순, 가격순, 획득 순)이라는 구체적인 시스템으로 확장합니다. 자료구조 복기 → 사용 API → 실제 구현 활용 순으로 짚어요.
정렬 — 인벤토리 정렬 시스템
게임에서 "이름순", "가격순", "획득 순"으로 아이템 목록을 한 줄로 재배치할 때, 비교 정렬(버블·선택·삽입)과 같은 생각이 들어요. 실제로는 정렬 키(이름/가격/날짜)만 정해 주면 됩니다.
📌 복기: 버블·선택·삽입 정렬
- 버블 정렬: 인접한 두 원소를 비교해서 순서가 잘못됐으면 교환. 한 번 지나가면 가장 큰 값이 맨 뒤로. 개념 "옆과 비교해서 큰 걸 오른쪽으로 밀어냄".
- 선택 정렬: 매 단계에서 "아직 정렬 안 된 구간"에서 가장 작은(또는 큰) 값을 찾아서 그 구간의 맨 앞(또는 맨 뒤)과 교환. 개념 "한 번에 하나씩 최솟값을 골라 자리에 놓음". 게임에서는 "가장 싼 아이템을 맨 위로" 같은 단순 정렬에 대응.
- 삽입 정렬: 이미 정렬된 앞부분에 새 원소를 "알맞은 자리에 끼워 넣기". 개념 "카드 한 장씩 손에 넣어서 순서 맞추기". 게임에서 "새로 획득한 아이템 하나만 이름순 자리에 끼우기"처럼 거의 정렬된 목록에 하나만 추가할 때 효율적.
- 공통: "비교"와 "자리 바꾸기(스왑)". 자료구조는 배열(리스트)이고, 연산은 비교 연산자(>, <)와 스왑(arr[i], arr[j] = arr[j], arr[i]).
📌 사용하는 파이썬 API
arr[j] > arr[j+1]- 인접 두 값 비교. 오름차순이면 "왼쪽이 크면" 자리 바꿈.
arr[j], arr[j+1] = arr[j+1], arr[j]- 두 칸의 값을 한 줄에 스왑. 임시 변수 없이 맞바꿀 수 있어요.
리스트.sort(key=...)- 실전에서는 내장 정렬을 쓰지만, "어떤 기준으로 비교할지"가 정렬 알고리즘에서 배운 비교·스왑과 같아요. key로 이름/가격 등을 지정.
🎮 실제 구현에서 쓰는 곳
- 인벤토리 정렬: 아이템 목록을 "이름순", "가격순", "획득 순"으로 바꿔서 표시. 각 아이템을 (이름, 가격, 획득시간)처럼 묶어 두고, 정렬 시 "비교할 키"만 바꿔서 정렬하면 됩니다.
- 선택 정렬 활용: "가격이 가장 낮은 아이템을 맨 위로"처럼 한 기준으로 최솟값/최댓값을 골라 자리를 바꾸는 UI(정렬 버튼 한 번에 한 종류만 적용)와 같은 생각입니다.
- 삽입 정렬 활용: 이미 이름순으로 정렬된 인벤에 "아이템 하나만 새로 넣을 때" 전체를 다시 정렬하지 않고, 새 아이템만 올바른 위치에 끼워 넣으면 됩니다. 실시간으로 아이템을 추가하는 게임에 유리해요.
- 시험에는 "한 단계 지나면 배열이 어떻게 되나?"가 자주 나와요. 버블 정렬의 비교·스왑 한 사이클이 곧 "한 단계"에 해당해요.
🐍 실습: 버블 정렬
인벤토리를 "이름순"으로 보여주고 싶다면, 아이템 이름 리스트를 정렬한 뒤 그 순서대로 그리면 됩니다. 파이썬에서는 items.sort(key=lambda x: x["name"])처럼 키를 지정해 정렬할 수 있어요.