728x90
반응형
링크: https://www.acmicpc.net/problem/1743
아이디어
- 전염되어있는 크기를 구하는거니 bfs를 쓰자
- N, M 최대값이 각 100 밖에 안돼서 NxM 전체 탐색해도 시간복잡도 그리 안클거 같음
- NxM 크기의 배열을 각 요소를 0으로 선언해주고 r,c 위치를 다 1로 표시해준다. -> li
- 방문 확인용 배열도 NxM 크기의 각 요소 0인 배열 선언
- li 리스트를 돌며 1인 (쓰레기위치)를 찾으면 방문했던 위치인지 판단.
- 방문하지 않은 위치라면 bfs 함수 호출
- size를 1부터 시작해서(자기자신) 주변 탐색을 진행
- 쓰래기 발견시 size+1하는 형식으로 진행
- bfs 함수는 size 값을 반환
- result는 초기값 0 을 가지고 bfs 함수 호출 시마다 큰 값을 result에 대입해줌
- li 탐색이 모두 완료하면 result 값 반환
구현
import sys
from collections import deque
input = sys.stdin.readline
N, M, K = map(int, input().split())
li = [[0]*M for x in range(N)]
visit = [[0]*M for x in range(N)]
mv = [(-1, 0), (0, 1), (1, 0), (0, -1)]
for i in range(K):
r, c = map(int, input().split())
li[r-1][c-1] = 1
def bfs(i, j):
size = 1
q = deque()
q.append((i, j))
while q:
y, x = q.popleft()
for m in mv:
ny = y + m[0]
nx = x + m[1]
if 0<=ny<N and 0<=nx<M:
if li[ny][nx] == 1 and visit[ny][nx] == 0:
q.append((ny, nx))
visit[ny][nx] = 1
size+=1
return size
result = 0
for i in range(N):
for j in range(M):
if visit[i][j] == 0 and li[i][j] == 1:
visit[i][j] = 1
result = max(bfs(i, j), result)
print(result)
마무리
그냥 생각나는대로 줄줄 풀었는데 한번에 맞춰서 기분이 좋았다.
기본적인 bfs 문제 얍얍
728x90
반응형
'코테준비 > 백준' 카테고리의 다른 글
[백준] 17086번: 바이러스 - Python (0) | 2025.04.23 |
---|---|
[백준] 17086번: 아기 상어 2 - Python (0) | 2025.04.21 |
[백준] 21610번: 마법사 상어와 비바라기 - Python (0) | 2025.04.15 |
[백준] 1966번: 프린터 큐 - Python (2) | 2025.04.14 |