DOI QR코드

DOI QR Code

Branch-and-Bound Algorithm for Division of Perfect Nine Dart Combinations

퍼펙트 9 다트 조합의 나눗셈 분기한정 알고리즘

  • Lee, Sang-Un (Dept. of Multimedia Eng., Gangneung-Wonju National University)
  • 이상운 (강릉원주대학교 과학기술대학 멀티미디어공학과)
  • Received : 2022.02.08
  • Accepted : 2022.08.05
  • Published : 2022.08.31

Abstract

This paper researched a study to find a combination of acquisition scores for 9 dart throws, which is the minimum number of dart tactile throws in 501 point dart games. The maximum score that can be obtained by throwing once in a dart game is 60 points, which can end the perfect dart game with 60 points eight times according to 60×8+21×1=501, and if you earn 21 points once, you can finish the game with 9 throws. This is called 9-dart finish. As such, only 18 and 14 studies on the combination of scores that can obtain 501 points with 9 throws are known, and no studies have been conducted applying the exhaustive search algorithm. This paper proposed a division branch-and-bound algorithm as a method of simplifying the O(2n) exponential time performance complexity of the typical branch-and-bound method of a exhaustive search method, to polynomial time complexity. The proposed method limited the level to 8, jumped to a quotient level of 501/60, and backtracked to explore only possible score combinations in the previous level. The possible score combinations of the nine perfect games found with the proposed algorithm were 90(101 cases).

본 논문은 501 다트게임의 최소 다트 촉 투척 횟수인 9회에 대한 획득점수 조합을 찾는 연구를 수행하였다. 다트게임에서 한 번 투척으로 획득할 수 있는 최대 점수는 60점으로 60×8+21×1=501에 의거 60점을 8회, 21점을 1회 획득하면 9회 투척으로 퍼펙트 다트게임을 종료할 수 있다. 이를 9-다트 종료라 한다. 이와 같이 9회 투척으로 501점을 획득 가능한 점수의 조합에 관한 연구는 18개와 14개만 알려져 있으며, 전수탐색 알고리즘을 적용한 연구는 수행되지 않고 있다. 본 논문은 전형적인 전수탐색법인 분기한정법의 O(2n) 지수시간 수행 복잡도를 다항시간 복잡도로 단순화 시키는 방법으로 나눗셈 분기한정 알고리즘을 제안하였다. 제안된 방법은 레벨을 8로 한정시키고, 501/60의 몫 레벨로 점프하고 역추적으로 이전 단계에서의 가능한 점수 조합만을 탐색하는 방법을 적용하였다. 제안된 알고리즘으로 찾은 9회의 퍼펙트게임의 가능한 점수 조합은 90개(101개 경우)를 얻었다.

Keywords

Ⅰ. 서론

다트 게임(dart game)은 다트 촉으로 다트 판(dart board)의 점수 과녁을 명중하여 설정된 목표 점수를 가장 먼저 획득한 사람이 승자가 되는 실내 스포츠게임이다. 게임 규칙은 한 사람이 다트 촉을 3회 던지는 라운드를 선수들이 번갈아 진행하여 8라운드 총 24회를 던지는 게임으로 목표 점수는 총점 301/501/701/ 901 중에서 501을 주로 적용하고 있다.

게임종류는 점수 합산(count up), 제로원(X01), 승자 진출 식(knock out)과 표준 크리켓(standard cricket)이 있으며, 일반적으로 X01을 채택한다. X01은 획득한 점수를 501점에서 빼서 먼저 ‘0’을 만드는 사람이 승리하는 경기 규칙이다. 만약 남아 있는 점수보다 높은 점수를 득점하면 버스트(bust)로 점수가 던지기 전으로 되돌려진다.

501 다트 게임에서 퍼펙트게임(perfect game)이란 501점을 가장 먼저 획득할 수 있는 최소 다트 촉 투척 횟수이다. 다트 판에는 1,2,…,20의 20개 기본 점수와 2배(double, D), 3배(triple, T)의 점수, 과녁 중심 흑점인 내부 흑점(inner bullseye)의 50점, 흑점 가장자리 원인 외부 흑점(outer bullseye)의 25점으로 구성되어 있어 한 번에 획득할 수 있는 최고 점수는 60점(tripple 20, T20)이다. 따라서 \(\begin{aligned}\frac{501}{60}=8.35\end{aligned}\)로 최소 9회인 60x8+21x1=501로 T20 과녁에 8회, T7 과녁에 1회 맞추어야 501점에 가장 먼저 도달하는 퍼펙트게임의 승자가 된다. 따라서 이를 9—다트 경기 종료(9-dart finish)라 한다.[1-11]

여기서 제기되는 문제는 이와 같이 “501점을 9회 만에 던져서 퍼펙트게임을 달성하는 경우 수는 T20x8+T7x1 이외에 몇 가지나 더 존재하는가?” 이다. 이에 대한 연구 결과는 수학적 공식 또는 알고리즘으로 증명된 사례가 전혀 없으며, 단지 18가지[1-10], 또는 27가지[11] 경우 수만이 제시되고 있다.

본 논문에서는 9-다트 경기 종료 문제(9-dart finish problem, 9-DFP)의 501점을 9회 투척으로 획득할 수 있는 가능한 모든 경우 수인 조합을 찾는 알고리즘을 제안한다. 2장에서는 다트게임 방법과 9-DFP의 501점 획득 경우 수와 관련된 연구 결과를 고찰한다. 3장에서는 나눗셈 분기한정 알고리즘(division branch-and–bound algorithm, DBBA)을 제안하고, 4장에서는 501점에 대해 DBBA로 가능한 조합 경우 수를 구한 결과를 제시한다.

Ⅱ. 다트 게임 방법과 501 9-다트 게임 종료 경우 수 관련연구

다트 게임은 그림 1의 (a)와 같이 2.37m 거리에서 원형 다트 판(dart board)에 다트 촉을 던져 점수를 획득하는 방법이다.[2,10]

OTNBBE_2022_v22n4_87_f0001.png 이미지

그림 1. 다트 게임과 점수

Fig. 1. Dart game & Scores

(b)에는 과녁이 꽂힌 지점의 다트 판 획득 점수를 표기하고 있다. 이를 획득할 수 있는 모든 점수 내림차순으로 요약 정리하면 (c)와 같다.

501점을 9회 만에 던져서 퍼펙트게임을 달성하는 경우 수인 조합(combination)에 관한 연구를 요약하여 그림 2에 제시하였다. (a)는 18가지[1-10], (b)는 27가지[11]를 제시하고 있음을 알 수 있다. (a)에 대해 대부분의 연구 결과는 3944 가지[1,2,6,8,9], 혹자는 4,944 가지[7]를 제시하고 있으며 실제로는 18가지를 얻을 수 있다. (b)에서는 체크아웃 표(checkout table)의 서로 다른 경우 수를 고려하지 않은 경우 71가지를 원문에서 제시하였으나 3-3-3의 3 라운드 중 서로 다른 라운드에서 획득한 점수가 동일한 중복되는 경우를 제거하면 27가지를 얻을 수 있다.[11] 여기서 3회 합계 점수의 체크아웃 표에서의 경우 수(빈도 수)를 고려하면 최종적으로 40가지를 얻는다. 표에서는 빈도수를 ‘( )’안에 표기하였다. 이들 중 중복되는 것을 삭제하면 13개만 남는다.

OTNBBE_2022_v22n4_87_f0002.png 이미지

그림 2. 501 9-다트 게임 종료 조합

Fig. 2. Combinations for 501 9-dart finish

이와 같이 최대 18가지 경우 수만 존재하는지 여부를 검증하기 위해 3장에서는 역 치환 알고리즘(RSA)을 제안하여 전수탐색(exhaustive search)하고자 한다.

Ⅲ. 나눗셈 분기한정 알고리즘

다트게임의 획득 가능 점수(scores, s)는 sk = {60,57,54, 51,50,48,45,42,40,39,38,36,34,33,32,30, 28,27,26,25,24,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}로 n = 43이다.

전형적인 [0, 1] 배낭문제(knapsack problem, KP)에 대한 분기한정 법(BB)은 덧셈 또는 뺄셈을 하면서 깊이 우선탐색(depth-first search, DFS)로 이진트리의 레벨을 n레벨까지 단계적으로 증가시키고 역추적(backtracking)하면서 전이진 트리를 만드는 방법으로 수행 복잡도는 O(2n)으로 n이 증가하면 지수적으로 증가하는 문제점을 갖고 있다. 다트 게임은 이와 같이 단순히 해당 물품을 추가 또는 제외의 [0, 1] 경우 수인 이진트리로 분기하는 방법이 아닌 하나의 부 노드에서 43개의 자 노드로 분기하므로 수행 복잡도는 O(243)보다도 훨씬 복잡하여 컴퓨터 프로그램으로 해를 얻기도 쉽지 않다.

따라서 본 장에서는 r0 = 501, rk - sk의 뺄셈이 아닌 \(\begin{aligned}x_{l}=\left\lfloor\frac{r_{k}}{s_{k}}\right\rfloor\end{aligned}\)의 나눗셈으로 xl 레벨로 점프하는 분기한정법을 제안하며, 레벨 l은 8까지로 한정시키고, 레벨 7에서 레벨 8의 자 노드로 분기하는 가지 수는 43개가 아닌 rj = sL + sU의 [sL, sU] 범위로 한정하여 빠르게 해를 얻는 방법을 채택한다. 이를 나눗셈 분기 한정 알고리즘(DBBA)이라 하며 다음과 같이 수행된다.

본 장에서는 DBBA를 트리를 이용하는 방법이 아닌 행렬을 이용하는 방법을 적용하여, xj ≥ 2를 갖는 점수들에 대해 마지막 점수부터 xj를 ‘1’씩 점진적으로 감소시키면서 나머지에 대한 가능한 점수 조합을 찾는다.

획득 점수 sk ={60,57,54,51,50,48,45,42,40,39,38,36,34,33,32, 30,28,27,26,25,24,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}로 설정한다.

501점을 획득하여야만 경기가 종료되는 주어진 문제에서 최소의 다트 촉을 던지는 횟수 z인 퍼펙트게임은 S = 501, maxSj = 60에 대해 \(\begin{aligned}z=\left\lceil\frac{S}{{ }_{\max } s_{j}}\right\rceil=501/60=\lceil 8.35\rceil=9회\end{aligned}\)이다. 따라서 조합 행렬의 j열을 다음과 같이 배정한다.

Step 1. z = 9로 j열에는 1, 2, ⋯ , 9를 배정한다.

i행에는 sk ≥ S/z를 배정한다.

Step 2. i행에는 \(\begin{aligned}\frac{501}{9}=55.67\end{aligned}\)로 si ≥ 56으로 56 ≤ si ≤ 60인 si ={60,57}를 배정한다.

Step 3. \(\begin{aligned}l=\left\lfloor\frac{S}{s_{i}}\right\rfloor\end{aligned}\)의 l개인 si를 xij에 배정한다. S-si×l인 나머지가 sk에 존재하면 이를 j = l+1에 xij로 배정한다. [트리 좌측 가지 레벨 8과 우측 가지 레벨 8로 점프]

이와 같이 수행하면 501=60x8+21, 501=57x8+45로 si = 60과 57에 대해 다음과 같이 행렬에 xl이 채워진다.\

JAKO202225948453507_91.png 이미지 

Step 4. si ={60,57} 각각에 대해 xj = 8이므로 j = 8,7, ⋯ , 2의 sj = si을 삭제한 경우 min (sj - s2)인 부족 점수 ri를 채울 수 있는 빈 셀의 가능한 점수 조합 범위 [s1,s2]를 결정하고, s2 내림차순으로 가능한 점수들을 채워 넣는다. s1 ≥ s2가 되면 이전의 i 조합에서 j = j-1에 대해 이 과정을 반복한다.[역 추적으로 이전 레벨의 해 생성]

추가되는 각 경우 수의 비어있는 셀을 채우는 방법은 나머지(modulo) 또는 부족점수인 rj = S - sixj를 비어 있는 셀의 수를 충족하는 점수 조합을 sk에서 찾아 추가한다. 만약 나머지 rj를 충족하는 비어 있는 j열 셀의 개수만큼 rj < si 이면 단일 점수를 찾고, rj > si이면 j열의 2개 점수 합인 rj = s1+ s2, sk < si 인 skxk 또는 skxk+sk'가 되며, 만약 두 점수 s1 < s2가 선택된 경우 s1 < sa < sb < s2의 sa,sb 쌍에 대해 sa = sb가 될 때까지 경우 수를 계속적으로 추가한다. 여기서 s2min (sj - s2)이 되는 수에 대해 rj = s2 - s1 조건을 충족하여야만 한다.

제안된 DBBA를 si = 60의 xj = 8로부터 xj = 7인 경우 가능한 조합 경우 수를 찾는 과정은 그림 3과 같다.

OTNBBE_2022_v22n4_87_f0003.png 이미지

그림 3. si = 60, xj = 7에 대한 DBBA

Fig. 3. DBBA for si = 60, xj = 7

60x8+21x1=501의 si = 60, xj = 8의 최대 xj에서 xj = 8-1= 7로 되면 501-60x7=81의 나머지(부족정수)가 된다. 이를 채울 2개 점수의 조합은 81/2 = 40.5의 점수가 존재하지 않아 min(sj - s2)인 s2 = 57로 결정되었으며, 81-57=24로 sk에 24(T8)이 존재하여 xj = 7에서 가능한 조합 경우 수는 [24, 57]이다. 따라서 [24,57] 범위 점수들인 sk ={57,54,51,50,48, 45,42,40,39,38,36,34, 33,32,30,28,27, 26,25,24}의 점수들에 대해 합이 ‘81’이 되는 쌍을 s1을 증가, s2를 감소하면서 s1 ≥ s2가 될 때까지 찾은 결과가 그림 3에 제시되어 있다. 이와 같은 방법으로 si = 60, xj = 8에 대해 xj =7,6,5,4,3,2,1에 대한 가능한 조합 경우 수를 찾으면 전수탐색을 할 수 있다.

sk ={57,54,51,50,48,45,42,40,39,38,36,34,33,32,30,28,27, 26,25,24}에 대해 두 점수 쌍 (s2,s1),s2 ≥ s1 의 합이 81이 되는 가능 한 조합의 경우 수를 찾아보면 (57,24)=81, (54,27)=81, (51,30)=81, (48,33)=81, (45,36)=81, (42,39)=81, ∃/(40,41)=81(s2 < s1)이다. 여기서 (50,31)=81의 경우 s2 =50에 대한 s1 =31은 존재하지 않아 제외되고 ∃/(40,41)=81 역시 s2 < s1인 동시에 s1 =41이 존재하지 않아 제외된다. 결국 si =60, xj =7인 60x7+s2x1+s1x1의 해는 (57,24)=81, (54,27)=81, (51,30)=81, (48,33)=81, (45,36) =81, (42,39)=81의 6가지가 존재함을 알 수 있다.

Ⅳ. 적용 및 결과 분석

본 장에서는 3장에서 제안된 나눗셈 분기한정 알고리즘(DBBA)을 적용하여 C=501의 z=9에 대한 가능한 경우 수를 표 1과 같이 찾을 수 있었다.

표 1. C=501, z = 9의 퍼펙트 다트게임 점수 경우 수

OTNBBE_2022_v22n4_87_t0001.png 이미지

Table 1. Perfect dart game score cases for C=501, z = 9

기존에 알려진 점수 기준 경우 수는 18개 또는 40개이었으나 본 역 치환 알고리즘으로 찾은 점수 기준 서로 다른 경우 수는 90개이며, 다른 과녁에 맞추어도 동일 점수를 획득할 수 있는 관계로 각 점수의 빈도수를 고려하면 총 조합의 경우 수는 101개임을 알 수 있다. 이 결과는 다음과 같이 계산되었다.

일예로 60x8+21x1의 경우 60(T20), 21(T7)로 T20x8+ T7x1로 계산되어 점수 경우 수=1, 조합 경우 수(빈도수 곱, frequency multiply)=1로 계산된다.

60x7+57x1+24x1의 경우 60(T20), 57(T19), 24(D12, T8)로 T20x7+T19x1+D12x1과 T20x7+T19x1+T8x1로 획득 가능하여 점수 기준 경우 수는 1이지만 조합 경우 수는 2로 계산된다.

Ⅴ. 결론

본 논문은 S=501점의 점수를 획득하여 퍼펙트 다트게임의 승자가 되기 위해 9회의 다트 촉을 던지는 경우 가능한 획득 점수의 조합 경우 수가 몇 개인지 정확히 찾아내는 알고리즘을 제안하였다.

제안된 알고리즘은 다트게임에서 획득할 수 있는 최고점수인 maxSk =60점(T20)을 대상으로 \(\begin{aligned}z=\left\lceil\frac{S}{{ }_{\max } s_{j}}\right\rceil=501/60=\lceil8.35\rceil=9\end{aligned}\)를 얻었으며, \(\begin{aligned}\frac{509}{9}=55.67\end{aligned}\)로 si≥ 56으로 56 ≤ si ≤ 60인 si ={60,57}에 대해 501=60x8+21x1, 501= 57x8+45x1의 기본 조합을 계산하였다.

이 기본 조합에 대해 xj = 8에 대해 7, 6, ⋯ ,2로 감소시키면서 9개 셀의 비어 있는 셀들에 부족 점수를 채울 수 있는 점수 쌍 또는 조합을 구하였다. 이 점수 쌍 범위 [s1,s2],s1 < s2 에 대해 s2 = s1이 될 때까지 가능한 조합을 찾는 나눗셈 분기한정 알고리즘을 제안하였다.

제안된 알고리즘을 501 9-다트 퍼펙트게임에 적용한 결과 기존에 알려진 18가지 경우 수에 비해 101가지 경우 수가 있음을 보였다.

특이한 점은 기존에는 T20(60)점에 대한 가능한 조합만을 제시한데 반해 제안된 알고리즘은 T20(60)에 대한 97개와 T19(57)에 대한 4개도 함께 찾아낼 수 있었다.

References

  1. Wikipedia, "Nine-Dart Finish," https://en.wikipedia.org/wiki/Nine-dart_finish, Retrieved Feb. 2022.
  2. Wikipedia, "Darts," https://en.wikipedia.org/wiki/Darts#Scoring, Retrieved Feb. 2022.
  3. Lardydarts, "Getting a Nine Dart Finish: How to Throw Like a Pro and Get a Nine Dart Finish," https://www.lardydarts.com/how-to/9-dart-finish, Retrieved Feb. 2022.
  4. D. Boyle, "In Search of the Nine Dart Finish: Understanding Standards in a Time of Frustration," https://www.linkedin.com/pulse/search-nine-dart-finish-unrelenting-standards-time-david-boyle, Nov. 2020.
  5. P. Lees, "Possible Mathematical Finishes to the Darts Game 501," https://www.titanwolf.org/Network/q/fbbfddde-6f93-4348-b443-ac3c664e598c/x, Retrieved Feb. 2022.
  6. Jesscowie96, "The Math Behind the Perfect Nine-Dart Finish," https://shipmitreb.wordpress.com/2017/03/08/the-math-behind-the-perfect-nine-dart-finish/, Mar. 2017.
  7. Northstandchat, "Thread: 9 Dart Finish Combinations," https://www.northstandchat.com/showthread.php?140891-9-dart-finish-combinations, Retrieved Feb. 2022.
  8. Quora, "How do You Get a 9 Dart Finish?," https://www.quora.com/How-do-you-get-a-9-dart-finish, Retrieved Feb. 2022.
  9. Idswater, "How Many Combinations does a 9 Darter Have?,"https://idswater.com/2020/02/22/how-many-combinations-does-a-9-darter-have/,Feb. 2020.
  10. Dartworld, "Dart World Q and A: Helpful Information," https://www.dartworld.com/dart-world-questions-answers.html,Retrieved Feb. 2022.
  11. Dartn, "Alle 71 verschiedenen Wege zum 9-Darter," https://www.dartn.de/Liste_aller_9-Darter_Moeglichkeiten, Retrieved Feb. 2022.