반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 코드캠프
- 자바스크립트
- next
- react
- 훈훈한자바스크립트
- js
- GirlsInICT해커톤
- Baekjoon
- filter
- props
- ts
- map
- props.key
- Girls_In_ICT
- React.js
- BOJ
- 객체인지
- 이미지스캔
- Bestawards
- nodejs
- 15721
- Unmounting
- dataFetching
- axios
- getDerivedStateFromProps
- typescript
- 백준
- 에릭슨엘지
- javascript
- Erricson
Archives
- Today
- Total
민희의 코딩일지
[백준] 2667 - 단지번호붙이기 본문
반응형
https://www.acmicpc.net/problem/2667
알고리즘
DFS, BFS
풀이
연결요소의 개수(총 단지수)와 연결요소에 속하는 정점의 개수(단지내 집의 수)를 구하는 문제이다.
이중 for 문을 돌려 새롭게 bfs 탐색을 시작할 때, 새로운 연결요소의 시작이라고 판단해 연결요소의 개수에 +1을 해주었다. (코드에서 연결요소의 개수는 ans)
bfs 내에 d 라는 변수를 선언해 한 연결요소를 순회할 때, (=새로운 정점으로 이동할 때) +1을 해주었다. 쉽게 말하면 방문 처리를 할 때 +1을 해주었다. dq에 아무값도 없을 때 d를 return 했다.
전체 코드
# 단지번호붙이기
# 연결요소의 개수(ans), 각 연결요소에 해당하는 개수(res)
from collections import deque
N = int(input())
board = [list(input()) for _ in range(N)]
def is_valid_coord(y, x):
return 0 <= y < N and 0 <= x < N
dy = (0, 1, 0, -1)
dx = (1, 0, -1, 0)
ans = 0 # 총 단지수
res = [] # 단지내 집의 수
def bfs(x, y):
dq = deque()
dq.append((x, y))
d = 1
while dq:
x, y = dq.popleft()
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if is_valid_coord(ny, nx) and board[nx][ny] == '1':
dq.append((nx, ny))
board[nx][ny] = '0'
d += 1
return d
for i in range(N):
for j in range(N):
if board[i][j] == '1':
board[i][j] = '0'
num = bfs(i, j)
ans += 1
res.append(num)
print(ans)
for num in sorted(res):
print(num)
반응형
'자료구조, 알고리즘 > 파이썬' 카테고리의 다른 글
[백준] 5014 - 스타트링크 (0) | 2024.07.12 |
---|---|
[백준] 2644 - 촌수계산 (0) | 2024.07.12 |
[백준] 11123 - 양 한마리... 양 두마리... (0) | 2024.07.06 |
[백준] 17276 - 배열 돌리기 (0) | 2024.07.06 |
[백준] 15469 - N과 M (1) (0) | 2024.07.06 |
Comments