티스토리 뷰

728x90

https://www.acmicpc.net/problem/21736

 

21736번: 헌내기는 친구가 필요해

2020년에 입학한 헌내기 도연이가 있다. 도연이는 비대면 수업 때문에 학교에 가지 못해 학교에 아는 친구가 없었다. 드디어 대면 수업을 하게 된 도연이는 어서 캠퍼스 내의 사람들과 친해지고

www.acmicpc.net


  • 문제 : 

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<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
댓글
© 2022 WonSeok, All rights reserved