이직하고만다(분노)
99클럽 코테 스터디 34일차 TIL + 백준 깊이너비탐색
xxo_ohii
2024. 8. 24. 13:40
728x90
오늘의 주제 : 깊이 너비 탐색문제
링크 : 백준 11123
https://www.acmicpc.net/problem/11123
n = int(input()) #테스트 케이스 수 n을 입력받음 아 그래서 2가 있었구나
ary = [] #각테스트케이스마다 mxk크기의 그리드를 입력받아 ary리스트에 저장함
mkary = [] #mkary리스트에는 각 그리드의 크기 (m,k)가 저장됨
for i in range(n):
m, k = map(int, input().split())
mkary.append((m, k))
tmpary = []
for j in range(m):
tmpary.append(list(map(str, input())))
ary.append(tmpary)
def bfs(graph, x, y, xlen, ylen):
q = deque()
q.append((x,y))
rslt = 1
graph[x][y] = '.'
while q:
cx, cy = q.popleft()
for m in range(len(dx)):
nx = cx + dx[m]
ny = cy + dy[m]
if nx < 0 or nx >= xlen or ny < 0 or ny >= ylen:
continue
if ary[i][nx][ny] == '#':
q.append((nx, ny))
ary[i][nx][ny] = '.'
rslt += 1
return rslt
#bfs함수정의
#특정좌표 (x,y)에서 시작해서 연결된 모든 #를탐색 그리고 그 영역의 크기를 반환
#그래프[x][y]는 현재위치를 방문했음을 표시
#네방향으로 인접한 노드를 탐색해 #인경우 큐에 추가하고 탐색을 이어감
#반환값은 rslt 하나의 무리내의 양의 수를 나타냄
totalcnt = []
for i in range(n): ## n개 만큼의 양 그리드 확인
cnt = []
for j in range(mkary[i][0]):
for x in range(mkary[i][1]):
if ary[i][j][x] == '#':
cnt.append(bfs(ary[i], j, x, mkary[i][0], mkary[i][1]))
totalcnt.append(cnt)
for i in range(len(totalcnt)):
print(len(totalcnt[i]))
# 각 테스트 케이스에 대해 양의 무리를 찾아 그 개수를 cnt 리스트에 저장
# 각 무리의 크기는 bfs 함수를 통해 계산되며, cnt 리스트에 추가됩니다.
# 마지막에 각 테스트 케이스마다 무리의 개수를 출력합니다(print(len(totalcnt[i]))).
안녕하세요 전 별가빠가사리에요
흑흑흑흑
저번이랑 똑같이 무슨유형인진 알겠는데
감을 0.000000000000000000000001퍼만 잡은상태
아 이번주 스택 무조건 마스터하고
dfs/bfs넘어갑니다.
728x90