🪴 문제분류
- 깊이 / 너비 우선탐색 ( DFS / BFS )
[ 관련 내용 참조 ]
- https://camellia-journey.tistory.com/27?category=1036554
[ 파이썬 ] DFS - 깊이 우선 탐색 / BFS - 넓이 우선 탐색 (Feat. 음료수 얼려 먹기, 미로 탈출 )
DFS와 BFS는 그래프를 탐색하기 위한 가장 대표적인 알고리즘이다. 이번 글에서는 DFS와 BFS에 대해 정리해보고자 한다. 1. DFS - DFS ( Depth-First Search ) 는 깊이 우선탐색으로, 그래프에서 깊은 부분을
camellia-journey.tistory.com
* 요약 *
DFS : 스택 자료구조 기반
BFS : 큐 자료구조 기반
DFS 원리
1. 탐색 시작 노드를 스택에 넣고 방문 처리!
2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있다면 그 노드를 스택에 넣고 방문처리
방문하지 않은 인접노드가 없다면 스택에서 최상단 노드 꺼내기
3. 2번 과정이 안될때까지 수행
[ 최상단 노드 방문 후 인접 노드를 최상단 노드처럼 dfs 다시 수행 ] !
🪴 문제 링크
- https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🪴 문제 설명
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다.
컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오.
** 제한사항 **
- 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다.
- 각 컴퓨터는 0부터 n-1인 정수로 표현합니다.
- i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[i][j]를 1로 표현합니다.
- computer[i][i]는 항상 1입니다.
n | computers | return |
3 | [[1, 1, 0], [1, 1, 0], [0, 0, 1]] | 2 |
3 | [[1, 1, 0], [1, 1, 1], [0, 1, 1]] | 1 |
** 입출력 예 설명 **


🪴 문제 풀이
1. 해당 문제는 dfs로 풀 수 있다!
2. 1번 노드 부터 시작해서 연결되어있는 노드를 탐색한다. 연결되어있는 노드가 발견되면 그 노드와 연결되어있는 또 다른 노드를 탐색한다.
3. 다른 노드 방문 전 해당 노드는 방문 했기 때문에 방문 처리를 해놓고 넘어간다! ( 1번과 3번이 연결되어있다고 가정하면 1번 노드와 연결되어있는 노드 탐색 중 3번을 발견! 따라서 3번 노드와 연결되어있는 노드 탐색 시 1번 노드는 다시 보지 않아도 됨! )
4. 모든 노드를 시작점으로 dfs를 수행하되 수행 시 방문한 것과 연결되어있던 것들은 표시해두고 dfs를 수행! dfs가 종료되어 돌아왔을 때 count 값 증가 ( 해당 노드와 연결된 애들을 모두 묶음 처리하고 돌아온 것! )

🪴 문제 풀이 코드
#dfs 기반 문제 풀이
def solution(n, computers):
answer = 0
visited = [0 for _ in range(n)]
for i in range(len(computers)):
for j in range(len(computers[0])):
if computers[i][j] == 1: # 시작점이 1이면
dfs(i, computers, visited)
answer+=1
return answer
def dfs(x, computers, visited):
visited[x] = 1 # 행부분 방문 완료
for i in range(len(computers[x])):
if computers[x][i] == 1: # 연결되어있는 노드라면
computers[x][i] = 0 # 현재 위치 0으로 변경
if visited[i] == 0 : # 해당 행을 방문 해볼 예정
dfs(i, computers, visited) # 해당 행 방문! 거기서 또 연결되어있는 정보 탐색 ( 해당 노드랑 연결되어있는 다른 노드 탐색 )
'스터디IT🌼 > Algorithm' 카테고리의 다른 글
알아두면 좋은 파이썬 문법 _ for 코딩테스트 (1) | 2022.10.13 |
---|---|
[ BaekJoon ] 마법사 상어와 토네이도 _ 시뮬레이션 (0) | 2022.10.11 |
[ Baekjoon ] 컨베이어 벨트 위의 로봇 _ 구현 (0) | 2022.10.05 |
[ 파이썬 ] deque 관련 함수 (0) | 2022.10.05 |
[ 프로그래머스 ] 소수찾기 _ 완전탐색 (1) | 2022.10.05 |
댓글