백준 21736번 바로가기
나의 풀이#
# 입력
import sys
from collections import deque
n,m = map(int,sys.stdin.readline().split())
maps = [list(sys.stdin.readline().strip()) for _ in range(n)]
visited = [[False] * m for _ in range(n)]
dx = [0,0,1,-1]
dy = [1,-1,0,0]
# 처리
def bfs(where):
count = 0
i,j = where[0],where[1]
queue = deque()
visited[i][j] = True
queue.append((i,j))
while queue:
i, j = queue.popleft()
for k in range(4):
x = i + dx[k]
y = j + dy[k]
if 0<=x<n and 0<=y<m and not visited[x][y]:
if maps[x][y] != 'X':
queue.append((x,y))
visited[x][y] = True
if maps[x][y] == 'P':
count += 1
return count
def get_index(maps, target):
for idx1, i in enumerate(maps):
for idx2, j in enumerate(i):
if j == target:
return idx1, idx2
ans = bfs(get_index(maps, 'I'))
print('TT' if ans == 0 else ans)
CODE REVIEW#
- graph을 이용해서 탐색하는 문제. 탐색하는 과정에서 현재 queue에서 꺼낸 값이 무엇이냐에 따라서 조건을 분기시키는 것이 핵심이었다.
- ‘I’의 위치를 구하기 위해서 enumerate을 두 번 사용해서 위치를 파악했다. 다른 방법으로는 전체를 탐색하는 방법이 있다.
for i in range(n):
for j in range(m):
if maps[i][j] == 'I':
print(i,j)
break