코딩 문제/백준
백준 - 16929번: Two Dots (Python)
besforyou999
2023. 9. 12. 17:15
백준 - 16929번 : Two Dots
문제 유형 : DFS, 그래프 탐색
난이도 : 골드 4
https://www.acmicpc.net/problem/16929
16929번: Two Dots
첫째 줄에 게임판의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에 게임판의 상태가 주어진다. 게임판은 모두 점으로 가득차 있고, 게임판의 상태는 점의 색을 의미한다. 점의 색은 알파벳 대문
www.acmicpc.net
문제 풀이
모든 정점에 대하여
1. 주어지는 게임판과 동일한 넓이, 높이의 배열을 선언하고
2. dfs로 그래프를 탐색하면서 시작점에서 몇번째로 탐색한 정점인지를 기록합니다.
3. 탐색이 끝나면 시작점 주위에 값이 4 이상인 값이 있다면 싸이클이 있는것이므로 "Yes" 출력
4. 모든 정점에 대하여 탐색하여도 싸이클이 없다면 "No" 출력
코드
import sys
input = sys.stdin.readline
dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]
def dfs(r, c, color):
for i in range(4):
nr, nc = r + dr[i], c + dc[i]
if 0 <= nr < N and 0 <= nc < M:
if graph[nr][nc] == color and visit[nr][nc] == 0:
visit[nr][nc] = visit[r][c] + 1
dfs(nr, nc, color)
N, M = map(int, input().split())
graph = [list(input().strip()) for _ in range(N)]
for r in range(N):
for c in range(M):
visit = [[0] * M for _ in range(N)]
visit[r][c] = 1
dfs(r, c, graph[r][c])
for i in range(4):
nr, nc = r + dr[i], c + dc[i]
if 0 <= nr < N and 0 <= nc < M:
if visit[nr][nc] >= 4:
print("Yes")
sys.exit(0)
print("No")
마무리