본문 바로가기
Tech/Coding

파이썬 조건 매핑 함수 구현 방법

by redcubes 2025. 7. 3.

관련문제: 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