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
- docker
- 구현
- C++
- 코드수행
- pytorch
- MySQL
- 2단계
- test-helper
- Object detection
- ubuntu
- AWS
- 전산기초
- 백준
- 프로그래머스
- SWEA
- 모두를 위한 딥러닝 강좌 시즌1
- 머신러닝
- CS231n
- Python
- cs
- 딥러닝
- 그리디
- 실전알고리즘
- 파이썬
- 3단계
- STL
- 이것이 코딩테스트다 with 파이썬
- ssd
- 1단계
- 자료구조 및 실습
Archives
- Today
- Total
곰퓨타의 SW 이야기
[프로그래머스 level3 네트워크] bfs 활용하기 ! 본문
해결해야하는 문제는 다음과 같다.
https://programmers.co.kr/learn/courses/30/lessons/43162
코딩테스트 연습 - 네트워크
네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있
programmers.co.kr
이 문제에서는 모든 네트워크를 탐방하며 연결되지 않은 네트워크가 있다면 네트워크 수를 추가해주어야 한다.
따라서 연결된 네트워크를 모두 탐방하기 위해 bfs 방법을 사용해야겠다고 생각하였다.
우선, computers의 배열을 graph로 바꾸었다. 즉, 0번째 컴퓨터에 1번쨰,2번째 컴퓨터가 연결되어 있다면 graph[0] = [1,2] 와같은 방식으로 저장될 수 있도록 형태를 바꾸었다.
그리고 queue에 0을 집어넣고, 0번째 컴퓨터부터 하나씩 순회하도록 하였다.
하나씩 순회할 때, 방문한 노드는 visited 배열을 통해 1로 표시해두었고,
해당 노드에 달려있는 다른 노드들은 graph를 통해 확인하며, 방문하지 않은 경우 queue에 삽입해주었다.
현재 queue가 비었는데 아직 탐방하지 못한 노드가 있는 경우 (visited[i]==0인게 존재하는 경우), queue에 현재 0인 노드를 추가해주고 네트워크 한개를 증설해주고 다시 bfs 탐방을 시작하도록 하였다.
이러한 아이디어를 바탕으로 작성한 코드는 다음과 같다.
def solution(n, computers):
answer = 1
graph = [[] for i in range(n)]
visited = [0]*n
for i in range(n):
for j in range(n):
if computers[i][j] and i!=j:
graph[i].append(j)
queue = [0]
while queue :
pos = queue.pop(0)
visited[pos]=1
for new_pos in graph[pos]:
if not visited[new_pos]:
queue.append(new_pos)
if len(queue)==0 and sum(visited)<n:
queue.append(visited.index(0))
answer += 1
return answer
'TIL > 프로그래머스' 카테고리의 다른 글
[프로그래머스 level3 디스크 컨트롤러] heapq 사용하기! (0) | 2021.06.18 |
---|---|
[프로그래머스 level3 순위] 플로이드 워셜 알고리즘 활용하기! (0) | 2021.06.17 |
[프로그래머스 level3 정수 삼각형] 다이나믹 프로그래밍 사용하기 (0) | 2021.06.16 |
[프로그래머스 level3 가장 먼 노드] 시간초과 극복하기 (0) | 2021.06.15 |
[프로그래머스 level3 입국심사] 이분 탐색 활용하기 (0) | 2021.06.15 |
Comments