반응형
250x250
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
- 백준 그래프 탐색 파이썬
- 정보처리기사 실기 시험
- 프로그래밍
- BOJ
- 자바
- dfs
- 2022년 정보처리기사 실기 가답안
- 2022년 정보처리기사 실기 1회 가답안
- 토마토
- 프로그래머스
- 코드
- 자료구조
- 2022년 정보처리기사 실기
- it
- python
- 정보처리기사
- 코딩
- 백준 백트랙킹
- 백준 N-Queens
- 프로그래머스 파이썬
- 알고리즘
- BFS
- 파이썬
- 백준 그래프 이론 파이썬
- 그리디
- 백준 백트랙킹 파이썬
- 백준
- 정보처리기사 실기
- 코딩테스트
- 백준 토마토 파이썬
Archives
- Today
- Total
코딩,안되면 될때까지
[백준]2667-단지번호붙이기 본문
728x90
반응형
<문제>
https://www.acmicpc.net/problem/2667
2667번: 단지번호붙이기
<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여
www.acmicpc.net
<풀이>-BFS알고리즘사용!!
- 그래프에서 집이 있는곳의 방문여부를 저장할 visited 배열을 선언한다.(초기값은 전부 미방문,즉 False로 선언)
- 집이 있는곳에서 출발해 인접한 네 방향의 위치를 확인한다. 이때 그래프의 값이 1인곳이면서(즉 집이 있는곳)동시에 아직 방문하지 않은경우 해당위치를 queue에 삽입한다. 그리고 단지의 크기를 저장할 total(초기값=1)변수에 1을 더해준다. (※ 해당위치의 값이 1이여도 이미 방문한경우 queue에 삽입해서는 안된다. queue에 삽입한다는것 자체가 방문을 의미)
- 큐에 가장먼저 들어온 곳의 위치를 추출한후 다시 인접한 곳의 위치를 확인한다.
- 위 2,3번과정을 queue가 빌때까지 반복한다.
- queue가 비었을 경우 total 값을 1로 다시 초기화한다.
- graph를 이중반복문을 통해 돌면서 값이 1이고 아직 미방문한 위치에서 위의 2~5번과정을 반복한다.
<코드>-파이썬
import sys
from collections import deque
n = int(sys.stdin.readline())
graph = []
result = []
for _ in range(n):
graph.append(list(map(int,sys.stdin.readline().rstrip())))
dx = [-1,1,0,0]
dy = [0,0,-1,1]
visited = [[False]*n for _ in range(n)]
def bfs(x,y):
total = 1
queue = deque()
queue.append((x,y))
while queue:
x,y = queue.popleft()
visited[x][y] = True
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 graph[nx][ny] == 0:
continue
if ((graph[nx][ny] == 1) and (not visited[nx][ny])):
queue.append((nx,ny))
total+=1
visited[nx][ny] = True
result.append(total)
total = 1
for i in range(n):
for j in range(n):
if ((not visited[i][j]) and (graph[i][j] == 1)):
bfs(i,j)
print(len(result))
result.sort()
for i in result:
print(i)
728x90
반응형
'백준 > 백준-파이썬' 카테고리의 다른 글
[백준 18405번 -경쟁적 전염]-파이썬 (0) | 2022.03.10 |
---|---|
[백준-14502번-연구소] - 파이썬 (4) | 2022.03.08 |
[백준]18352- 특정거리의 도시 찾기 (6) | 2022.03.05 |
2178-미로탈출 (0) | 2022.03.05 |
1260-DFS와 BFS (2) | 2022.03.03 |