친구 2~5명과 즐기는 k-NN 보드 게임 — 숨은 별을 결과만 듣고 추리하거나, 다 놓은 뒤 떨어지는 별을 두고 겨루거나. 두 모드 모두 1·2라운드 K=1 → 3라운드부터 K=3 다수결, k-NN 분류 그 자체입니다.
공통 규칙: 1·2라운드 K=1 → 3라운드부터 K=3 다수결 · 표가 갈리면 무승부(모두 1점)
게임을 시작하면 점수가 표시돼요.
import math
from collections import Counter
# 이 게임의 판정 로직 그대로 — k-NN 다수결 분류
def knn_owner(markers, target, k):
"""markers: [(x, y, 주인)], target: (x, y) — 별은 누구 땅?"""
by_dist = sorted(markers, key=lambda m: math.dist((m[0], m[1]), target))
votes = Counter(owner for _, _, owner in by_dist[:k])
return votes.most_common(1)[0][0]
markers = [
(7, 6, "파랑"), # 별에 제일 가까운 말!
(8, 8, "빨강"), (6, 8, "빨강"), # 하지만 빨강이 2개로 에워쌌다
(2, 12, "파랑"),
]
target = (7, 7)
print("K=1:", knn_owner(markers, target, 1)) # 파랑 — 1·2라운드(K=1) 판정
print("K=3:", knn_owner(markers, target, 3)) # 빨강 — 3라운드부터의 다수결!