시즌 1 · 알파고편 / PART 1 · PART 1 · 바둑이라는 우주 / Ch 3 · 따냄과 자살수

코드: 그룹 찾기 + 그룹 활로

지금까지 짠 단일 돌 함수들로는 부족해. 그룹 개념이 들어가니까 BFS (또는 DFS) 가 필요. 시작점에서 인접한 같은 색을 따라가면서 모으는 거.

🔑 BFS 핵심 아이디어
  1. 시작점 좌표를 stack (또는 queue)에 넣는다.
  2. stack에서 하나 꺼낸다.
  3. 이미 본 거면 패스, 다른 색이면 패스.
  4. 같은 색이면 그룹에 추가하고, 인접 4방향을 stack에 넣는다.
  5. stack 빌 때까지 반복.

그리고 그룹 활로는 더 간단해. 그룹의 각 돌에 대해 인접 빈 자리 모으면 끝. set 자료형이라 중복 자동 제거.

실행 결과를 보면:

  • (2,1)과 (2,2)는 둘 다 같은 그룹 — 둘 다 호출해도 같은 set 반환.
  • (4,4)는 별개 그룹.
  • (2,1)-(2,2) 그룹 활로는 6개 (앞 페이지에서 손으로 센 거랑 일치).
  • (4,4) 모서리 단독 그룹은 활로 2개.
💡 왜 stack을 쓸까

리스트의 pop()은 마지막 원소를 빠르게 꺼낸다. 이게 DFS(깊이 우선)이고, BFS와 동작은 약간 다르지만 그룹 전체를 찾는 결과는 똑같아. collections.deque로 큐를 쓰면 BFS 되고 — 둘 다 정답.

PYTHON