← AI 놀이터 홈으로

🎮 틱택토 AI — 수읽기와 대결 (Minimax)

AI가 게임을 잘 두는 첫 번째 방법: 모든 수를 끝까지 읽어보기. 딥블루·알파고로 이어지는 '탐색'의 조상, 미니맥스와 직접 겨뤄 보세요.

📖 따라하기 가이드 — 1 / 7 단계

Step 1. AI가 게임을 잘 두는 첫 번째 방법 — 수읽기

1997년 체스 챔피언을 꺾은 딥블루, 2016년 바둑의 알파고까지 — 게임 AI의 뼈대는 “모든 수를 미리 읽어보기” (탐색, search)예요. 오늘은 그 조상 격인 미니맥스(minimax)를 틱택토로 직접 만나 봐요. 화면 읽는 법: 왼쪽 3×3 보드에서 나는 ❌(선공), AI는 ⭕(후공)이에요. 빈 칸을 클릭하면 착수! 오른쪽에서 AI의 수읽기 깊이(수준)를 고를 수 있고, AI가 두기 직전 빈 칸마다 작은 숫자(AI의 계산 점수)가 잠깐 나타나요.

🎮 대국판 — 나 ❌ vs AI ⭕

🖱️ 내 차례예요 — 빈 칸을 클릭해서 ❌를 두세요

읽는 법: ❌ = 나, ⭕ = AI. AI가 두기 직전 빈 칸에 뜨는 반투명 숫자는 “그 칸에 뒀을 때”의 미니맥스 점수예요(AI 입장) — + = 이기는 길, 0 = 무승부, − = 지는 길, 절댓값이 클수록 빨리 끝나요. AI가 고른 칸은 노란 배경, 승부가 나면 이긴 줄 세 칸이 하이라이트돼요.

🎛️ AI 수준과 대국 조작

AI가 몇 수 앞까지 읽을지 고르세요. 깊게 읽을수록 강해져요.

📊 지금 상태

이번 수에 탐색한 국면
—
AI 수준
🐣 1수만 읽기
전적 (승·무·패)
0 · 0 · 0
선공
나 ❌

🧠 끝까지 읽기 AI의 첫 수에서 탐색 국면 수를 확인해 보세요 — 특히 AI 선공이면 빈 판에서 수십만 국면을 읽어요.

🧪 이렇게 실험해 보세요

  1. 🐣 상대로 한 줄 위협 만들기 — 전혀 안 막는 걸 확인
  2. 🤔 3수 읽기는? — 코앞의 위협은 막지만 더블 어택엔 당해요
  3. 🧠 끝까지 읽기에게 같은 수법 쓰기 — 미리 차단당해요
  4. AI 선공 + 🧠 첫 수 — 모든 칸이 0점인 이유 생각해 보기

🧮 수식과 파이썬

내 차례 = max(자식들) · 상대 차례 = min(자식들)
나는 최선을, 상대도 최선을 둔다고 가정하고 끝까지 읽어요 (미니맥스). 점수: 승 +10−depth, 패 −10+depth, 무승부 0 — 빨리 이기는 수를 선호해요.
🐍 파이썬 코드로 보면? (펼치기)
# 미니맥스: 나도 최선, 상대도 최선을 둔다고 가정하고 끝까지 읽기
def minimax(board, current, ai, depth):
    w = winner(board)                    # 승부가 났는지 확인
    if w == ai:       return 10 - depth  # AI 승리 (빨리 이길수록 높은 점수)
    if w is not None: return -10 + depth # AI 패배 (늦게 질수록 덜 나쁨)
    if is_full(board):return 0           # 빈 칸 없음 = 무승부

    scores = []
    for cell in empty_cells(board):      # 둘 수 있는 모든 칸에
        board[cell] = current            # 한 수 둬 보고
        scores.append(minimax(board, other(current), ai, depth + 1))
        board[cell] = None               # 되돌리기 (수읽기니까!)

    if current == ai:
        return max(scores)               # 내(AI) 차례: 제일 좋은 수를 고름
    return min(scores)                   # 상대 차례: 나에게 제일 나쁜 수를 둠

# AI의 실제 착수 = 빈 칸마다 minimax 점수를 매겨 최고점 칸 선택