일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- java
- frontend
- DP
- VIM
- 그레이들
- Javascript
- vscode
- 동적 계획법
- git
- Database
- 리트코드
- Graph
- DFS
- BFS
- LeetCode
- Python
- Redux
- 자바
- react
- Algorithm
- network
- 안드로이드
- TypeScript
- CS
- 알고리즘
- 다이나믹 프로그래밍
- 프로그래머스
- Data Structure
- 백준
- db
Archives
- Today
- Total
늘 겸손하게
백준 - 16929번: Two Dots (Python) 본문
백준 - 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")
마무리
'코딩 문제 > 백준' 카테고리의 다른 글
백준 - 14567번: 선수과목 (Prerequisite) (0) | 2023.09.21 |
---|---|
백준 - 15659번: 연산자 끼워넣기 (3) (0) | 2023.09.19 |
백준 - 11067번: 모노톤길 (Python) (0) | 2023.09.11 |
백준 1890 점프 (Java) (0) | 2023.08.04 |
백준 13904 과제 (Java) (0) | 2023.08.01 |