티스토리 뷰
728x90
https://www.acmicpc.net/problem/21736
- 문제 :
2020년에 입학한 헌내기 도연이가 있다. 도연이는 비대면 수업 때문에 학교에 가지 못해 학교에 아는 친구가 없었다. 드디어 대면 수업을 하게 된 도연이는 어서 캠퍼스 내의 사람들과 친해지고 싶다.
도연이가 다니는 대학의 캠퍼스는 N×M크기이며 캠퍼스에서 이동하는 방법은 벽이 아닌 상하좌우로 이동하는 것이다. 예를 들어, 도연이가 (x, y)에 있다면 이동할 수 있는 곳은 (x+1, y), (x, y+1), (x−1, y), (x, y−1)이다. 단, 캠퍼스의 밖으로 이동할 수는 없다.
불쌍한 도연이를 위하여 캠퍼스에서 도연이가 만날 수 있는 사람의 수를 출력하는 프로그램을 작성해보자.
- 풀이 :
bfs로 도연이의 위치부터 탐색을 시작하고 만날 수 있는 모든 사람을 카운트하면 된다.
- 소스코드 :
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
29
30
31
32
33
34
35
36
37
|
import sys
from collections import deque
input = sys.stdin.readline
dx = [-1,1,0,0]
dy = [0,0,-1,1]
def bfs(maps,start):
queue = deque()
queue.append(start)
c = [[0 for _ in range(M)] for _ in range(N)]
c[start[0]][start[1]] = 1
cnt = 0
while queue:
x,y = queue.popleft()
for i in range(4):
ax = x + dx[i]
ay = y + dy[i]
if 0<=ax<N and 0<=ay<M:
if c[ax][ay] == 0 and maps[ax][ay] != 'X':
queue.append([ax,ay])
c[ax][ay] = 1
if maps[ax][ay] == 'P':
cnt += 1
if cnt == 0:
return 'TT'
else:
return cnt
if __name__ == "__main__":
N,M = map(int,input().split())
maps = [list(input().strip()) for _ in range(N)]
for i in range(N):
for j in range(M):
if maps[i][j] == 'I':
print(bfs(maps,[i,j]))
|
cs |
320x100
'Algorithm > DFS & BFS' 카테고리의 다른 글
(Python) - BOJ(1388번) : 바닥 장식 (0) | 2022.02.22 |
---|---|
(Python) - BOJ(21738번) : 얼음깨기 펭귄 (0) | 2022.02.17 |
(Python) - BOJ(17086번) : 아기 상어 2 (0) | 2022.02.15 |
(Python) - BOJ(16953번) : A → B (0) | 2022.02.15 |
(Python) - BOJ(16928번) : 뱀과 사다리 게임 (0) | 2022.02.15 |
댓글
© 2022 WonSeok, All rights reserved