백준 21736번 - 헌내기는 친구가 필요해
백준 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