만드는 원리

7명으로 토너먼트를 짜려면, 부전승은 어디에 둬야 할까

사람 수가 2의 거듭제곱이 아닐 때 대진표를 공평하게 짜는 방법. 2인용 미니게임 토너먼트에 쓴 코드 그대로입니다.

2026.10.09 · 한그릇 공작소

2인용 미니게임 토너먼트는 2명부터 30명까지 받습니다. 8명, 16명이면 쉬운데 7명, 11명, 30명처럼 딱 안 떨어지는 인원이 오히려 흔해요. 이때 누군가는 첫 판을 안 하고 올라가야(부전승) 합니다.

먼저 칸 수를 정한다

사람 수보다 크거나 같은 가장 작은 2의 거듭제곱이 대진표 칸 수예요. 7명이면 8칸, 11명이면 16칸, 30명이면 32칸입니다. 빈칸 수만큼 부전승이 생겨요. 7명이면 1명, 11명이면 5명이 부전승입니다.

부전승을 아무 데나 두면 생기는 일

빈칸을 그냥 맨 뒤에 몰아 두면 11명일 때 이렇게 됩니다. 앞쪽 8칸에서는 4경기가 열리고, 뒤쪽 8칸에 남은 3명 중 한 명은 첫 판을 안 하고, 나머지 빈칸끼리… 빈칸 대 빈칸 경기가 생겨요. 다음 라운드에도 부전승이 이어지면서, 운 좋은 한 명은 결승 근처까지 한 경기도 안 하고 올라갑니다.

스포츠 대진표 방식을 빌렸다

테니스나 배드민턴 대진표는 1번 시드와 2번 시드가 결승에서야 만나도록 자리를 배치합니다. 이 배치를 그대로 쓰면 부전승이 대진표 전체에 고르게 퍼져요. 빈칸을 "가장 뒤 번호 시드"로 두면 자연스럽게 서로 다른 블록에 흩어지거든요.

function seedOrder(P) {
  var a = [1, 2];
  while (a.length < P) {
    var n = a.length * 2, b = [];
    a.forEach(function (s) { b.push(s, n + 1 - s); });
    a = b;
  }
  return a;
}
// seedOrder(8) → [1, 8, 4, 5, 2, 7, 3, 6]

규칙은 "짝을 이루는 두 시드의 번호 합이 항상 칸 수 + 1"이에요. 8칸이면 1과 8, 4와 5, 2와 7, 3과 6이 붙습니다. 7명이면 8번 자리가 비니까 1번이 부전승이 되고, 나머지는 모두 첫 판을 치릅니다. 11명이면 12~16번이 비고, 그 짝인 1~5번이 부전승인데 이 다섯 자리는 대진표 곳곳에 흩어져 있어서 두 번째 판부터는 모두 경기를 하게 돼요.

그럼 누가 1번이 되나

여기서 시드는 실력 순위가 아니에요. 참가자 이름을 먼저 사다리 글에서 쓴 방식으로 무작위로 섞고, 섞인 순서대로 1번, 2번… 을 붙입니다. 그러니 부전승도 결국 무작위로 정해져요.

한 번 더 생각한 것들

  • 경기 방식은 단판 또는 3판 2선승 중에 고를 수 있습니다. 종목은 일곱 가지 중에서 나와요.
  • 각 경기마다 "무작위로 정하기" 버튼을 둬서, 시간이 없을 땐 그 경기만 추첨으로 넘길 수 있게 했습니다.
  • 라운드 이름은 남은 사람 수로 붙여요. 2명이면 결승, 4명이면 4강, 그 위로는 8강, 16강.

직접 해 보기: 2인용 미니게임 토너먼트