functools.cmp_to_key로 사용자 지정 순서 만들기
키만으로 부족할 때 비교 함수를 작성합니다
functools.cmp_to_key로 사용자 지정 순서 만들기은(는) CoddyKit의 무료 Competitive Programming Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Competitive Programming Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
key로 표현할 수 없을 때
어떤 정렬 순서는 각 항목의 값 하나가 아니라 두 항목을 함께 비교해야 결정됩니다. 이런 경우에는 key 대신 비교 함수를 직접 작성합니다.
비교 함수가 반환하는 값
비교 함수는 두 항목 a와 b를 받습니다. a가 먼저 와야 하면 음수를, b가 먼저 와야 하면 양수를, 동률이면 0을 반환하십시오.
def cmp(a, b):
if a < b: return -1
if a > b: return 1
return 0cmp_to_key로 연결하기
Python의 sort는 key만 받으므로, 비교 함수를 사용할 수 있는 key로 바꾸려면 functools.cmp_to_key로 감싸야 합니다.
from functools import cmp_to_key
items.sort(key=cmp_to_key(cmp))대표적인 가장 큰 수 문제
숫자를 이어 붙여 가장 큰 문자열을 만들려면 어떤 두 숫자를 이어 붙인 결과가 더 큰지 비교해야 합니다. 단순한 key로는 이를 표현할 수 없습니다.
def cmp(a, b):
return (a + b < b + a) - (a + b > b + a)비교 식의 요령 이해하기
a+b를 이어 붙인 결과가 더 크면 이 표현식은 -1을 반환하므로 a가 b보다 앞에 정렬됩니다. 이렇게 해서 만들 수 있는 가장 큰 수를 구성합니다.
nums = ["3", "30", "34"]
nums.sort(key=cmp_to_key(cmp))
print("".join(nums)) # 34330중요한 것은 부호입니다
정렬은 결과의 부호만 확인합니다. -2나 -100을 반환해도 -1을 반환한 것과 같으므로 정확한 크기에 신경 쓰지 않아도 됩니다.
비교 함수의 일관성 유지하기
비교 함수는 일관적이어야 합니다. a가 b보다 앞서고 b가 c보다 앞선다면 a도 c보다 앞서야 합니다. 모순이 생기면 정렬 순서가 엉망이 됩니다.
가능하면 key를 우선하기
key는 항목마다 한 번 계산되지만, 비교 함수는 여러 쌍에 대해 실행되므로 더 느립니다. key로 해결할 수 없는 경우에만 cmp_to_key를 사용하십시오.
뺄셈으로 간단히 비교하기
숫자 비교에서는 a - b를 그대로 반환해도 됩니다. 그 부호에 이미 순서 정보가 담겨 있기 때문입니다. 정수에서는 짧고 안전한 방법입니다.
items.sort(key=cmp_to_key(lambda a, b: a - b))실수에 주의하기
실수에서는 a - b가 아주 작은 값이나 0으로 반올림될 수 있습니다. 잘못된 동률 판정을 피하려면 명시적인 분기문으로 비교하십시오.
비교 함수로 사용자 지정 순서 만들기
이어 붙이기 순서, 사용자 지정 순위, 규칙에 따른 동률 처리까지 모두 구현할 수 있습니다. 까다로운 정렬에서는 비교 함수가 해결책이 됩니다.
빠른 확인
비교 함수가 cmp(a, b)에 대해 음수를 반환합니다.
정리
key로 표현할 수 없는 순서는 비교 함수를 cmp_to_key로 감싸서 구현할 수 있습니다. 부호를 반환하고 일관성을 유지하며, 가능하면 key를 우선하십시오. 🧩
자주 묻는 질문
“functools.cmp_to_key로 사용자 지정 순서 만들기” 강의는 무료인가요?
네 — “functools.cmp_to_key로 사용자 지정 순서 만들기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Competitive Programming Academy 강의 전체를 잠금 해제할 수 있습니다. Competitive Programming Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“functools.cmp_to_key로 사용자 지정 순서 만들기”에서 뭘 배우나요?
키만으로 부족할 때 비교 함수를 작성합니다 브라우저에서 직접 실행하는 실습 코드로 Competitive Programming Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Competitive Programming Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Competitive Programming Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“functools.cmp_to_key로 사용자 지정 순서 만들기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Competitive Programming Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Competitive Programming Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- sorted()와 key 함수
- 여러 필드로 정렬하기
- functools.cmp_to_key로 사용자 지정 순서 만들기
- 먼저 정렬하면 해법이 열리는 이유