[전체 코딩 테스트 문제 풀이 과정] • 프로그래머스 :: 누적 372개 / (Lv0) 236개 (Lv1) 73개 (Lv2) 53개 (Lv3) 10개 • 백준 1차 :: 누적 173개 / (브론즈1) 13개 (브론즈2) 23개 (브론즈3) 26개 (브론즈4) 9개 (브론즈5) 37개 (실버1) 5개 (실버2) 6개 (실버3) 10개 (실버4) 19개 (실버5) 18개(골드1) 1개 (골드5) 1개 • 백준 2차 :: 누적 21개 / (실버1) 7개 (실버2) 2개 (실버3) 8개 (실버4) 2개 (실버5) 2개 • SW expert academy:: 누적 15개 / D1 6개 D2 9개
from collections import deque
def bfs(graph,start):
graph[start[0]][start[1]]=0
directions = [(-1,0),(0,-1),(0,1),(1,0)]
count = 1
dd = deque([start])
while dd:
x,y = dd.popleft()
for dx,dy in directions:
xx = x+dx ; yy = y+dy
if 0<=xx<n and 0<=yy<m and graph[xx][yy]==1:
count += 1
graph[xx][yy] = 0
dd.append((xx,yy))
return count
T = int(input())
for _ in range(T):
m,n,k = map(int,input().split())
ls = [[0]*m for i in range(n)]
for __ in range(k):
i,j = map(int,input().split())
ls[j][i]=1
answer = []
for i in range(n):
for j in range(m):
if ls[i][j] == 1:
answer.append(bfs(ls,(i,j)))
print(len(answer))
실버1의 <단지번호 붙이기> 문제와 완전히 동일하지는 않지만 비슷해서 참고 게시글로 태그해두었다.