20강 / 20강
자료구조 고르는 법 — 문제에 맞는 그릇
20강의 마무리, 그리고 여러분이 만들 것
19강까지 오면서 계속 반복된 말이 있습니다 — "무엇을 자주 하느냐에 달렸다". 이제 그 판단을 체계적으로 하는 법을 정리합니다.
자료구조를 고를 때 던져야 할 질문은 딱 다섯 개입니다.
🎮 자료구조 고르기 도우미
조건을 체크하면 알맞은 자료구조와 그 이유를 알려 줍니다. 아래에 있는 실전 문제 10개도 풀어 보세요.
한눈에 보는 선택 지도
| 이런 상황이면 | 이걸 쓰세요 | 왜 |
|---|---|---|
| 순서대로 쌓고 순서대로 읽는다 | 리스트 | 인덱스 접근 O(1), 가장 단순 |
| 절대 바뀌면 안 된다 / 열쇠로 쓴다 | 튜플 | 불변이라 안전하고 해시 가능 |
| "있나 없나"만 자주 묻는다 / 중복 제거 | 집합 | 포함 검사 O(1) |
| 이름으로 값을 찾는다 | 딕셔너리 | 열쇠 조회 O(1) |
| 마지막 것부터 되돌린다 | 스택 (리스트) | LIFO — 실행 취소, 되짚기 |
| 먼저 온 것부터 처리한다 | deque | FIFO — 앞뒤 모두 O(1) |
| 가장 급한 것부터 처리한다 | 힙 (heapq) | 최솟값 꺼내기 O(log n) |
| 정렬된 순서 + 범위 검색이 필요하다 | 이진 탐색 트리 / 정렬 리스트 + bisect | 해시는 범위를 못 다룸 |
| 계층 구조다 (폴더, 조직도) | 트리 | 부모-자식 관계를 그대로 |
| 임의의 관계다 (친구, 도로) | 그래프 (인접 리스트) | 아무 점끼리 이을 수 있음 |
Counter — 딕셔너리 + 세기. 실전에서 정말 자주 씁니다.
Python
브라우저에서 실행
deque 의 maxlen — 이런 옵션을 아는 것도 자료구조 공부입니다.
Python
브라우저에서 실행
20강의 결론을 숫자로. 그릇 선택이 곧 성능입니다.
Python
브라우저에서 실행
여러분이 배운 것
1부 — 그릇의 기본형
변수 하나에서 시작해 리스트·튜플·집합·딕셔너리로 값을 담는 법을 배웠고,
스택과 큐로 꺼내는 규칙이 자료구조를 만든다는 걸 봤습니다.
연결 리스트에서 화살표라는 발상을, 재귀에서 스택이 숨어 있다는 사실을,
트리에서 계층을 담는 법을 익혔습니다.
2부 — 문제를 푸는 도구
힙으로 우선순위를, 해시로 즉시 찾기를, 그래프로 관계를 표현했습니다.
BFS와 DFS는 큐냐 스택이냐라는 한 글자 차이였고,
탐색과 정렬은 같은 결과에 이르는 여러 길을 보여 줬습니다.
그리고 미로 하나에 그 모든 게 들어간다는 것도 확인했죠.
3부 — 판단의 기준
Big-O로 빠르기를 말하는 법을 배웠고, 마지막으로
완벽한 자료구조는 없고 문제에 맞는 자료구조가 있을 뿐이라는 결론에 닿았습니다.
이제 여러분에게 필요한 건 강의가 아니라 만들고 싶은 것 하나입니다.
동아리 회원 관리든, 급식 추천기든, 간단한 게임이든 좋습니다.
만들다 보면 반드시 이런 순간이 옵니다 — "이거 느린데, 그릇을 바꿔 볼까?"
그 순간이 오면, 이 20강이 여러분 안에서 작동하기 시작한 겁니다. 🎉
🤔 확인 문제
"회원 아이디로 회원 정보를 즉시 찾고 싶다" — 알맞은 자료구조는?
해설 "이름으로 값을 찾는다"는 딕셔너리의 정의 그 자체입니다. 열쇠 조회가 O(1)이에요.
🤔 확인 문제
"작업이 계속 들어오는데 급한 것부터 처리해야 한다" — 알맞은 것은?
해설 들어온 순서가 아니라 중요도 순서로 꺼내야 하므로 우선순위 큐 = 힙입니다. 큐를 쓰면 급한 일이 뒤로 밀려요.
🤔 확인 문제
"점수가 80~90점인 학생을 자주 조회한다" — 해시(딕셔너리)를 쓰면 안 되는 이유는?
해설 해시는 정확히 이 값만 즉시 찾습니다. 범위가 필요하면 정렬된 배열 + 이진 탐색이나 이진 탐색 트리를 쓰세요. 가장 빠른 것이 항상 정답은 아닙니다.
🤔 확인 문제
자료구조를 고를 때 가장 먼저 생각해야 할 것은?
해설 "자주 하는 일을 빠르게"가 전부입니다. 한 번밖에 안 하는 연산이 느린 건 대개 문제가 안 돼요. 완벽한 자료구조는 없고, 이 문제에 맞는 자료구조가 있을 뿐입니다.