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 |
| 31 |
Tags
- 주니어 백엔드 개발자
- 올 겨울은 조금 따뜻할 것 같다.
- 넥슨개발자컨퍼런스
- tibero 7.23
- 25304번
- java #예외처리 #throw #throws
- 정보처리기사 실기 #정처기 실기 #2024년 2회 #정처기 2024년 2회 #공부법 # 꿀팁
- 서버 엔지니어
- 서버 개발자
- 백엔드 개발자 로드맵
- object 클래스 # java
- Next.js
- 브루트 포스법
- server developer
- Spring
- static #자바 메모리 구조 #멤버 변수
- tmax tibero
- 이분탐색
- heap area #stack area #static area #jvm
- level3
- 2798블랙잭
- server engineer
- 단계10
- level2
- 반복문
- 자바 #자바문법 #자바기초 #참조형 #기본형
- java #추상클래스
- 나는야 4학년 #5학년 까지 가보자구
- ndc2025
- software enginner
Archives
- Today
- Total
개발자 쿠키
[백준(BOJ)] 2667번 : 단지번호 붙이기 - Python(파이썬) - (실버1, BFS DFS) 본문
풀이
BFS로도 DFS로도 풀 수 있는 문제이다.
연결요소 유형이고, 방문했을 때, 방문한 곳을 0으로 바꿔준다는게 핵심이다!
지금도 자꾸 함수를 외워서, 그리고 아주조금 생각하면서 풀고 있는데, 흰 종이를 가져와 그래프를 그림과 표로
방문해준 곳을 어떻게 방문표시를 해줄건지 생각하며 풀어보자.
BFS로 풀기
from collections import deque
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
def bfs(graph, x, y):
queue = deque()
queue.append((x, y))
graph[x][y] = 0
cnt = 1
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or ny < 0 or nx >= n or ny >= n:
continue
if graph[nx][ny] == 1:
graph[nx][ny] = 0
queue.append((nx, ny))
cnt += 1
return cnt
n = int(input())
graph = []
for i in range(n):
graph.append(list(map(int, input())))
array = []
for i in range(n):
for j in range(n):
if graph[i][j] == 1:
array.append(bfs(graph, i, j))
array.sort()
print(len(array))
for i in array:
print(i)
DFS로 풀기
n = int(input())
graph = []
for i in range(n):
graph.append(list(map(int, input())))
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
def dfs(x, y):
if x < 0 or y < 0 or x >= n or y >= n:
return False
if graph[x][y] == 1:
global cnt
cnt += 1
graph[x][y] = 0
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
dfs(nx, ny)
return True
return False
cnt = 0
result = 0
array = []
for i in range(n):
for j in range(n):
if dfs(i, j) == True:
array.append(cnt)
result += 1
cnt = 0
array.sort()
print(result)
for i in range(len(array)):
print(array[i])
'algorithm' 카테고리의 다른 글
| [프로그래머스/SQL] 흉부외과 또는 일반외과 의사 목록 출력하기 (0) | 2024.08.20 |
|---|---|
| 백트래킹 부수기 N과 M 시리즈 (0) | 2024.08.19 |
| [백준] BFS와 DFS 백준 파이썬, 추천 문제, 누구나 쉽게 DFS BFS 이해시키기 (0) | 2024.08.17 |
| [프로그래머스/python] Lv.2 프로세스 (0) | 2024.08.07 |
| [프로그래머스/python] Lv.2 기능개발 (0) | 2024.08.05 |