헝가리안 할당(최소 비용 배정) 계산기
사람×일 비용 행렬을 넣으면 한 사람에 한 일씩 겹치지 않게 배정하되 총비용이 가장 작아지는 조합을 찾습니다. 이익 최대화와 인원·일의 수가 다른 경우도 다루며, 행마다 제일 싼 것을 고르면 왜 틀리는지 함께 보여 줍니다.
한 줄이 한 사람입니다. 첫 줄에 열 이름을, 각 줄 앞에 행 이름을 적어도 됩니다. 12×12까지.
3명 × 3가지 · 최소 비용
5
3쌍을 겹치지 않게 배정한 결과이고, 이보다 싼 배정은 없습니다.
행렬과 고른 자리
| 개발 | 기획 | 디자인 | |
|---|---|---|---|
| 김 | 4 | 1 | 3 |
| 이 | 2 | 0 | 5 |
| 박 | 3 | 2 | 2 |
파란 칸이 고른 자리입니다. 한 행과 한 열에서 정확히 하나씩만 고릅니다. 행마다 제일 싼 것을 그냥 고르면 열이 겹쳐 배정이 되지 않습니다 — 그 합(3)은 도달할 수 없는 값이고, 실제 최소는 5입니다.
배정
김→기획비용 1
이→개발비용 2
박→디자인비용 2
계산 방법
- 1비용을 표로 적습니다. 한 줄이 한 사람이고 칸이 각 일의 비용입니다.
- 2첫 줄에 열 이름을, 각 줄 앞에 행 이름을 적으면 결과에 그대로 나옵니다.
- 3비용 최소인지 이익 최대인지 고릅니다.
- 4행렬에서 파란 칸이 고른 자리인지 확인합니다.
- 5「행마다 제일 싼 것만 골랐다면」과 견줘 왜 그 방법이 틀리는지 봅니다.
자주 묻는 질문
사람마다 일마다 비용이 정해져 있을 때, 한 사람에 한 일씩 겹치지 않게 배정하되 총비용이 가장 작아지는 조합을 찾는 문제입니다. 사람과 일, 기계와 작업, 배송기사와 구역처럼 일대일로 붙여야 하는 배정이 모두 여기에 해당합니다.
안 됩니다. 여러 사람이 같은 일을 제일 싸게 할 수 있으면 열이 겹쳐 배정 자체가 성립하지 않습니다. 그렇게 고른 합은 도달할 수 없는 값이고, 실제 최소는 그보다 큽니다. 이 도구는 두 값을 나란히 보여 줍니다.
행이나 열 전체에서 같은 수를 빼도 최적 배정이 바뀌지 않는다는 성질을 씁니다. 어느 배정이든 그 행에서 정확히 하나를 고르므로 모든 배정의 총합이 똑같이 줄어들어 순위가 그대로이기 때문입니다. 그래서 최솟값을 빼 0을 만들어 나가다가 0만으로 배정을 완성할 수 있게 되면 그것이 최적입니다.
n명이면 n!가지라 금방 손을 뗍니다. 10명이면 362만 가지, 12명이면 4억 8천만 가지가 넘습니다. 헝가리안 알고리즘은 인원의 세제곱에 끝나므로 12명이라도 즉시 나옵니다.
부호를 뒤집으면 최소화 문제가 되어 같은 알고리즘을 그대로 씁니다. 이 도구는 위에서 「이익 최대」를 고르면 알아서 바꿔 계산합니다.
모자란 쪽에 비용 0짜리 가짜 줄을 덧대 정사각형으로 만들어 풉니다. 가짜에 배정된 것은 「그 사람은 아무 일도 맡지 않는다」 또는 「그 일은 아무도 맡지 않는다」는 뜻이라, 결과에서 빼고 누가 남는지 따로 알려 줍니다.
셋 다 배정 문제지만 목적이 다릅니다. 이분 매칭은 비용 없이 짝의 «개수»만 최대로 하고, 안정 매칭은 선호 «순위»로 불안정한 쌍이 없게 만들며, 할당 문제는 «비용의 합»을 최소로 합니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 정답지는 모든 배정을 만들어 보는 전수 탐색입니다. n!가지를 전부 훑어 총비용이 가장 작은 것을 찾으며, 헝가리안이 쓰는 포텐셜·증가 경로를 전혀 쓰지 않는 방법이라 서로를 검산합니다. 예제 일곱 가지와 무작위 행렬 200개에서 확인했습니다.
- 알고리즘의 뼈대인 「행·열에서 상수를 빼도 최적 배정이 바뀌지 않는다」도 직접 검사합니다. 행 전체에서 7을 뺐을 때 총비용만 정확히 그만큼 줄고 배정 자체는 그대로인 것, 한 열에서만 뺐을 때도 마찬가지인 것을 고정했습니다.
- 음수 비용도 다룹니다. 처음 만든 전수 탐색이 「지금까지의 합이 이미 최선보다 크면 버린다」로 가지치기를 했는데, 음수가 있으면 뒤에서 더 줄어들 수 있어 그 가정이 깨진다는 것을 최대화 테스트가 잡았습니다. 지금은 가지치기 없이 전부 훑습니다.
- 배정이 실제로 겹치지 않는 것, 표에 적힌 비용이 입력 행렬의 값과 같은 것, 총합이 개별 비용의 합과 맞는 것도 함께 검사합니다. 총액만 맞고 배정이 엉망인 경우를 걸러 내기 위해서입니다.
- 이익 최대화는 부호를 뒤집어 푸는데, 그 결과도 전수 탐색과 대조해 확인했습니다.
- 인원과 일의 수가 다를 때 덧댄 가짜 줄이 결과에 새어 나오지 않는 것, 남는 사람·남는 일이 제대로 나오는 것도 고정했습니다.
- 12×12까지 다룹니다. 계산은 인원의 세제곱이라 더 커도 되지만 표를 통째로 그리는 것이 목적이라 그보다 크면 화면이 읽히지 않습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.