코드: 그룹 찾기 + 그룹 활로
지금까지 짠 단일 돌 함수들로는 부족해. 그룹 개념이 들어가니까 BFS (또는 DFS) 가 필요. 시작점에서 인접한 같은 색을 따라가면서 모으는 거.
🔑 BFS 핵심 아이디어
- 시작점 좌표를
stack(또는 queue)에 넣는다. - stack에서 하나 꺼낸다.
- 이미 본 거면 패스, 다른 색이면 패스.
- 같은 색이면 그룹에 추가하고, 인접 4방향을 stack에 넣는다.
- 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