문제
2823번: 유턴 싫어
상근이는 여자친구와의 드라이브를 위해서 운전을 배우고 있다. 도로 연수를 10년쯤 하다 보니 운전은 그럭저럭 잘하게 되었다. 하지만, 그는 유턴을 하지 못한다. 10년동안 도로 연수를 받았지
www.acmicpc.net
알고리즘
- bfs 탐색을 통해 문제를 수행한다.
- 길의 좌표를 확인 후 하나의 길 좌표를 탐색한다.
- 모든 길은 연결되어있기 때문에 하나의 길만을 탐색하여 연결된 길을 탐색하면 된다.
- 4가지 방향에 길의 수를 체크하여 길의 개수가 2 미만일 경우 1을 리턴 받는다.
- 모든 길을 탐색하면 0을 리턴 받는다.
코드
import sys
from collections import deque
def bfs(v):
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
q = deque([v])
while q:
a, b = q.popleft()
# 각 정점에 길의 개수
cnt = 0
# 상/하/좌/우 탐색
for i in range(4):
x = a + dx[i]
y = b + dy[i]
# 범위 내에 있고 길이라면
if -1 < x < r and -1 < y < c and graph[x][y] == ".":
# 4가지 방향에 길의 수 체크
cnt += 1
# 탐색하지 않았다면 탐색
if visited[x][y] == False:
visited[x][y] = True
q.append([x, y])
# 4가지 방향을 탐색했을 때 길이 2가지 미만이면 1을 리턴
if cnt < 2:
return 1
# 모든 구역을 탐색했으면 0을 리턴
return 0
r, c = map(int, sys.stdin.readline().split())
chek = [] # 길 좌표 확인
# 그래프를 표현
graph = []
for i in range(r):
graph.append(list(map(str, sys.stdin.readline().strip())))
for j in range(c):
if graph[i][j] == ".":
chek.append([i, j])
visited = [[False] * c for _ in range(r)]
# 모든 길이 연결되어 있음으로 하나의 길만을 탐색
print(bfs(chek[0]))
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 1068번(파이썬): 트리 (0) | 2021.08.30 |
---|---|
[baekjoon] 백준 1245번(파이썬): 농장 관리 (0) | 2021.08.29 |
[baekjoon] 백준 17204번(파이썬): 죽음의 게임 (0) | 2021.08.27 |
[baekjoon] 백준 14496번(파이썬): 그대, 그머가 되어 (0) | 2021.08.26 |
[baekjoon] 백준 11123번(파이썬): 양 한마리... 양 두마리... (0) | 2021.08.25 |