728x90
백준
음식물 피하기(1743)번
https://www.acmicpc.net/problem/1743
1743번: 음식물 피하기
첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다. 그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다
www.acmicpc.net
문제
코드
- BFS를 이용한 풀이
- 개수 세기
from collections import deque
N, M, K = map(int, input().split())
graph = [[0] * M for _ in range(N)]
visited = [[False] * M for _ in range(N)]
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
# 음식물 좌표 1 입력
for _ in range(K):
r, c = map(int, input().split())
graph[r-1][c-1] = 1
result = 0
def BFS(i, j):
queue = deque()
queue.append((i, j))
visited[i][j] = True
cnt = 1 # 시작 지점 포함하여 카운트 시작
while queue:
x, y = queue.popleft()
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < N and 0 <= ny < M:
if not visited[nx][ny] and graph[nx][ny] == 1:
visited[nx][ny] = True
cnt += 1
queue.append((nx, ny))
return cnt
for i in range(N):
for j in range(M):
if graph[i][j] == 1 and not visited[i][j]:
cnt = BFS(i, j) # BFS 함수에서 cnt를 초기화하므로 별도 초기화 불필요
result = max(result, cnt)
print(result)
728x90
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준] 전자레인지 - 파이썬 (0) | 2024.06.20 |
---|---|
[백준] 세탁소 사장 동혁 - 파이썬 (0) | 2024.06.20 |
[Do it! 알고리즘] K번째 수 구하기(백준 11004) (0) | 2024.03.12 |
[Do it! 알고리즘] ATM 인출 시간 계산하기(백준 11399) (0) | 2024.03.09 |
[Do it! 알고리즘] 내림차순으로 자릿수 정렬하기(백준 1427) (0) | 2024.03.09 |