반응형
문제
https://www.acmicpc.net/problem/2667
코드
from collections import deque
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
n = int(input())
home = list()
ans = []
def bfs(home, a, b):
cnt = 1
queue = deque()
queue.append((a, b))
home[a][b] = 0
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= n:
continue
if home[nx][ny] == 1:
home[nx][ny] = 0
queue.append((nx, ny))
cnt += 1
return cnt
for i in range(n):
home.append(list(map(int, input())))
for a in range(n):
for b in range(n):
if home[a][b] == 1:
ans.append(bfs(home, a, b))
print(len(ans))
for i in sorted(ans):
print(i)
설명
https://looancheong.tistory.com/164
이 문제와 굉장히 유사하다.
차이점이 있다면,
bfs 내에서 횟수를 카운트해서 카운트 값을 리턴한다는 점이다.
그리고 처음에 입력값을 그냥 그대로 받아서 str로 처리되어서 고민하고 있었는데,
list(map(int, input())) 형식으로 처리하면 split 없이도 각 항목이 처리된다는 걸 처음 알았다.
아마 각 값에 int 값을 매핑해서 그렇게 되는 것 같다.
ans의 개수와 각 ans의 값을 정렬 상태에서 출력해 주면 된다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, Python] 백준 2156: 포도주 시식 (0) | 2023.04.18 |
---|---|
[파이썬, Python] 백준 10867: 중복 빼고 정렬하기 (0) | 2023.04.17 |
[파이썬, Python] 백준 1012: 유기농 배추 (0) | 2023.04.13 |
[파이썬, Python] 백준 15650: N과 M (2) (0) | 2023.04.12 |
[파이썬, Python] 백준 1158: 요세푸스 문제 (0) | 2023.04.11 |