플러드 필 알고리즘 시뮬레이터
그림판 페인트 통 알고리즘을 직접 눌러 보는 시뮬레이터입니다. BFS로 시작 칸과 같은 색으로 이어진 영역만 채우고, 4-연결·8-연결 차이와 "새 색이 원래 색과 같으면 아무것도 안 바뀌어야 한다"는 함정을 직접 확인할 수 있습니다.
칸을 누르면 그 칸과 같은 색으로 이어진 영역이 전부 선택한 색으로 바뀝니다.
격자의 칸을 눌러 그 칸과 이어진 같은 색 영역을 채워 보세요.
채우려는 색이 시작 칸의 색과 같으면 아무 일도 일어나지 않아야 합니다. 이 검사를 빼먹고 무작정 «같은 색이면 채우고 계속 퍼진다»만 구현하면, 이미 새 색으로 칠한 칸을 «원래 색과 같다»며 다시 집어 무한히 되풀이합니다. 위에서 이미 선택한 색과 같은 칸을 눌러 보면 «바뀐 것 없음»으로 즉시 끝나는 것을 볼 수 있습니다.
4-연결과 8-연결은 대각선만 다릅니다. «대각선 체크무늬» 예시를 불러와 4-연결로 한 칸을 채우면 대각선으로 이어진 같은 색 칸까지는 번지지 않지만, 8-연결로 같은 칸을 채우면 대각선을 타고 전부 이어집니다.
같은 색이라도 경로가 없으면 절대 안 이어집니다. «벽으로 나뉜 두 방» 예시에서 왼쪽 방을 채워도 오른쪽 방은 색이 같을 뿐 벽에 막혀 있어 전혀 바뀌지 않습니다. 플러드 필은 색이 아니라 연결된 경로를 따라 퍼집니다.
사용 방법
- 1"그리기" 모드로 격자에 몇 가지 색을 칠해 봅니다.
- 2"채우기" 모드로 바꾸고 칸을 눌러, 그 칸과 이어진 같은 색 영역이 전부 바뀌는 것을 봅니다.
- 34-연결·8-연결을 바꿔 가며 대각선으로만 이어진 영역이 채워지는지 비교합니다.
- 4이미 선택한 색과 같은 칸을 눌러 "바뀐 것 없음"이 되는지 확인합니다.
자주 묻는 질문
시작 칸에서 출발해 이웃 중 시작 칸과 같은 색인 칸만 골라 큐에 넣고, 꺼낼 때마다 새 색으로 칠하며 그 이웃을 다시 검사하는 BFS(너비 우선 탐색)입니다. 그림판 프로그램의 페인트 통이 이 알고리즘입니다.
4-연결은 상하좌우 네 칸만 이웃으로 보고, 8-연결은 대각선 네 칸까지 여덟 칸을 이웃으로 봅니다. 그래서 대각선으로만 맞닿은 같은 색 칸은 4-연결에서는 서로 다른 영역이지만 8-연결에서는 하나로 이어집니다.
아무것도 바뀌지 않습니다. 이 검사를 빼먹고 구현하면, 이미 새 색으로 칠한 칸을 "원래 색과 같다"고 다시 집어 무한히 되풀이하는 버그가 생깁니다 — 새 색과 원래 색이 같으니 색이 바뀌어도 달라진 게 없어 종료 조건이 영영 오지 않기 때문입니다.
경로가 없기 때문입니다. 플러드 필은 색이 아니라 이어진 경로를 따라 퍼지므로, 벽이나 다른 색에 막혀 시작 칸과 연결되지 않은 칸은 색이 같아도 절대 바뀌지 않습니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 격자 상태는 이 기기에만 남습니다.
알아두면 좋은 점
- 격자는 10×10 고정 크기로 다룹니다.
- BFS로 구현했지만 DFS(재귀나 스택)로 구현해도 채워지는 칸의 집합은 같습니다 — 방문 순서만 달라집니다. 다만 재귀 DFS는 격자가 아주 크면 호출 스택이 넘칠 수 있어 실전에서는 BFS나 스택 기반 DFS를 더 흔히 씁니다.
함께 보면 좋은 도구
라이프 게임콘웨이의 라이프 게임을 돌려 보고 이 출발점이 멸종하는지, 몇 세대 만에 어떤 주기로 반복하는지까지 미리 확인합니다.유니온-파인드union·find 명령을 넣으면 부모 배열이 어떻게 바뀌는지 한 단계씩 보입니다.최소 신장 트리간선 목록을 넣으면 크루스칼과 프림이 각각 어떤 순서로 간선을 고르는지 단계별로 보여 주고 총 비용을 냅니다.gitignore 판정.gitignore 규칙과 경로를 넣으면 그 파일이 무시되는지, 어느 줄이 마지막으로 이겼는지 알려줍니다.울프람 규칙규칙 번호 0~255를 8비트로 풀어 세 칸 이웃에 대응시키고 세대를 쌓아 무늬를 그립니다.
마지막 검증: 2026년 9월 3일 · 결과는 참고용 추정치입니다.