-문제:https://www.acmicpc.net/problem/2583
2776번, 단지 붙이기와 같은 유형의 문제다
bfs문제로 풀기 어렵지 않은 문제다
스스로 푼 문제. silver level1이다
문제에서 갯수와 각각의 빈공간의 갯수 출력하는 건데 잘 안보고 풀었더니 초반에 몇번 틀렸다.
문제 자세히 보는 건 기본!!
-주의 해야할 부분:
1. bfs를 보면 ans=0에서 시작하기 때문에 처음 시작하는 한 칸의 갯수를 덜 센다
그래서 각각의 결과에 1을 더해줘야한다. 이거 때문에 마지막에 꽤 시간을 소요했다
2. 주어진 순서대로 행,열이라고 생각했는데 주어진 위치와 테이블 인덱스는 반대이므로 a,b,c,d로 받고
(b,a),(d,c) 순서로 생각하고 직사각형을 채워야한다
-정답풀이:
from collections import deque
m,n,k=map(int,input().split())
graph=[[0]*n for _ in range(m)]
dx=[-1,1,0,0]
dy=[0,0,-1,1]
#사각형 있는 곳 채우기(b,a)~(d,c)
for _ in range(k):
a,b,c,d=map(int,input().split())
for i in range(b,d):
for j in range(a,c):
graph[i][j]=1
def bfs(x,y):
global ans
queue=deque()
queue.append([x,y])
graph[x][y]=1
while queue:
x,y=queue.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<m and 0<=ny<n:
if graph[nx][ny]==0:
graph[nx][ny]=1
queue.append([nx,ny])
ans+=1
ans=0
cnt=0
result=[]
for i in range(m):
for j in range(n):
if graph[i][j]==0:
bfs(i,j)
cnt+=1
result.append(ans)
ans=0
print(cnt)
result.sort()
for i in range(cnt):
print(result[i]+1,end=' ')
-틀린풀이:
'백준 > Search' 카테고리의 다른 글
[백준/bfs] 16236번: 아기 상어(다시) (0) | 2022.02.21 |
---|---|
[백준/bfs] 11725번: 트리의 부모 찾기 (0) | 2022.02.20 |
[백준/bfs] 10026번: 적녹색약 (0) | 2022.02.18 |
[백준/bfs] 7569번: 토마토 (0) | 2022.02.17 |
[백준/bfs,dfs] 4963번: 섬의 개수(발전한 부분) (0) | 2022.02.17 |