📋 문제 소개
문제 설명
해시 테이블(딕셔너리)을 사용하여 학생 성적을 관리한다. Key-Value 쌍으로 빠른 검색, 삽입, 삭제가 가능하다. 파이썬의 dict는 내부적으로 해시 테이블로 구현되어 있다.
INPUT
학생 이름과 점수로 구성된 딕셔너리 students
OUTPUT
평균 점수, 최고 점수 학생 이름, 최고 점수 / 특정 학생 점수 조회
예제
입력
students = {Alice:85, Bob:92, Charlie:78, David:95}출력
평균: 87.5
최고: David (95점)💡 힌트
평균: sum(scores.values())/len(scores). 최고점: max(scores, key=scores.get).
① 문제 이해
| 항목 | 내용 |
|---|---|
| 문제 | 딕셔너리로 학생 성적을 관리한다 (평균, 최고점, 조회). |
| 자료구조 | 파이썬 dict = 내부적으로 해시 테이블 구현 |
| 예제 | Alice:85, Bob:92, Charlie:78, David:95 → 평균 87.5, 최고 David |
② 핵심 아이디어
해시 테이블은 key를 해시 함수로 변환해 배열 인덱스로 직접 접근한다. 검색/삽입/삭제가 평균 O(1)이다. 파이썬 dict가 바로 이 구조다.
# 평균 계산
avg = sum(students.values()) / len(students)
# 최고점 학생 찾기
top = max(students, key=students.get) # 값 기준 최대 키 반환
# 안전한 조회
score = students.get("Alice") # 없으면 None (KeyError 없음)
score = students["Alice"] # 없으면 KeyError ❌
③ 코드 분석
def manage_grades(students):
average = sum(students.values()) / len(students) # ①
top_student = max(students, key=students.get) # ②
top_score = students[top_student] # ③
return average, top_student, top_score
def find_student_score(students, name):
return students.get(name) # ④ 없으면 None — 안전
| 번호 | 코드 | 의미 |
|---|---|---|
| ① | sum(students.values()) |
모든 점수(value) 합산 |
| ② | max(students, key=students.get) |
값(점수) 기준으로 가장 큰 키(이름)를 반환하는 파이썬 관용구 |
| ③ | students[top_student] |
키가 확실히 존재하므로 [] 접근 OK |
| ④ | students.get(name) |
키 없으면 None 반환 — KeyError 방지 |
④ 자주 하는 실수
❌ students[name] — KeyError
키가 없을 때 students[name] 은 KeyError를 발생시킨다. 존재 여부가 불확실할 때는 students.get(name) 또는 name in students 를 쓴다.
⚠️ 해시 충돌
서로 다른 키가 같은 해시값을 가질 수 있다(해시 충돌). 파이썬은 내부적으로 충돌을 처리해주지만, 최악의 경우 O(n)이 될 수 있다.
💡 max(d, key=d.get) 은 인터뷰에서 자주 쓰이는 파이썬 관용구다. 'value가 가장 큰 key를 찾아라' → 이 한 줄로 해결.
⑤ 시간복잡도
| 연산 | 시간 | 이유 |
|---|---|---|
| 검색/삽입/삭제 | 평균 O(1) | 해시 함수로 인덱스 직접 계산 |
| 최악 검색 | O(n) | 해시 충돌 시 선형 탐색 (드문 경우) |
| 전체 순회 | O(n) | 모든 key/value를 한 번씩 방문 |
⑥ 핵심 정리
- 파이썬 dict = 해시 테이블. 검색/삽입/삭제 평균 O(1).
- 안전한 조회:
.get(key)— 없으면 None, 에러 없음. - 최대/최소 key 찾기:
max(d, key=d.get). - week1 01번 문제에서 이미 썼던 패턴이다 — 이제 왜 빠른지 이해가 됐을 것이다.
'크래프톤 정글 > 정글에서 문제풀기' 카테고리의 다른 글
| [정글 알고리즘]-[하]-백준 2164 카드2 (0) | 2026.03.16 |
|---|---|
| [정글 알고리즘]-[하]-백준 9933 - 민균이의 비밀번호 (0) | 2026.03.16 |
| [정글 베이직 18] — 연결 리스트 (Linked List) (0) | 2026.03.13 |
| [정글 베이직 17] — 우선순위 큐 · 응급실 관리 (0) | 2026.03.13 |
| [정글 베이직 16] — 큐 · 프린터 대기열 (0) | 2026.03.13 |