관련문제: https://www.acmicpc.net/problem/17072
파이썬 조건 매핑 함수 구현 방법: lambda vs bisect
특정 입력값 v가 어떤 구간에 속하는지 판단하여 그에 따른 코드를 반환하고 싶을 때, 파이썬에서는 여러 가지 방식으로 조건-값 매핑을 처리할 수 있다.
1. lambda를 이용한 조건 매핑
rules = [
(lambda v: v < 255000, 35),
(lambda v: v < 510000, 111),
(lambda v: v < 765000, 43),
(lambda v: v < 1020000, 45),
(lambda v: True, 46), # 항상 마지막에 True 조건을 둬서 default 처리
]
def get_code(v):
for cond, code in rules:
if cond(v):
return code
입력값 v가 어떤 조건을 처음으로 만족하느냐에 따라 반환값이 달라진다.
예시:
get_code(100000) # 출력: 35
get_code(600000) # 출력: 43
get_code(1200000) # 출력: 46
2. bisect 모듈을 활용한 고속 구간 매핑
bisect 모듈은 정렬된 기준값 리스트에 대해 이진 탐색을 통해 구간 인덱스를 빠르게 찾는다. 구간 수가 많을 때 성능 향상에 유리하다.
import bisect
thresholds = [255000, 510000, 765000, 1020000]
codes = [35, 111, 43, 45, 46]
def get_code(v):
idx = bisect.bisect(thresholds, v)
return codes[idx]
# 예시
print(get_code(100000)) # 출력: 35
print(get_code(600000)) # 출력: 43
print(get_code(1200000)) # 출력: 46
비교표:
| 방식 | 탐색 시간 | 특징 |
|---|---|---|
for cond in rules |
O(n) | 조건이 적을 때 간단 |
bisect |
O(log n) | 구간이 많을 때 빠름 |
bisect를 사용하려면 조건 경계값 리스트가 오름차순으로 정렬되어 있어야 하며, codes 리스트는 thresholds보다 하나 더 많아야 한다.
4. 활용 예시
- 점수에 따른 등급 부여
- RGB 값에 따른 이미지 필터 적용
- 온도, 센서값에 따른 알람 코드
- 로그 심각도 판단
5. 구현 방식 비교 요약
| 방식 | 장점 | 단점 |
|---|---|---|
lambda |
짧고 간결한 조건 표현 | 조건이 복잡하면 가독성 저하 |
bisect |
탐색이 매우 빠름, 단순 비교에 유리 | 조건이 복잡하면 부적합 |
조건에 따라 반환 값을 다르게 하는 로직은 다양한 상황에서 반복적으로 등장하며, 목적과 조건 구조에 따라 적절한 방식을 선택하는 것이 중요하다.

'Tech > Coding' 카테고리의 다른 글
| 달팽이2 (0) | 2025.08.04 |
|---|---|
| 최장 공통 부분수열(LCS) 과 DP 역추적 (0) | 2025.07.21 |
| 도깨비말(Pig Latin) (0) | 2025.06.23 |
| 색칠 공부 (0) | 2025.06.22 |
| 17144번: 미세먼지 안녕!(OOP 문제 해결) (0) | 2025.06.17 |