티스토리 뷰
문제는 위와 같으며, 이 문제는 BFS 를 구현할 수 있다면 쉽게 해결할 수 있는 문제입니다. 주어진 컴퓨터들의 연결 관계를 dictionary (자바에서는 Map) 형태로 구성한 뒤 BFS 탐색을 통해 방문할 수 있는 모든 컴퓨터의 수를 구한 뒤, -1 해주면 정답이 됩니다.
파이썬 코드는 다음과 같습니다.
from sys import stdin
def bfs(node_list, start):
need_visit = list()
visited = list()
need_visit.append(start)
while need_visit:
node = need_visit.pop(0)
if node not in visited:
visited.append(node)
if node in node_list:
need_visit.extend(node_list[node])
return len(visited) - 1
n = int(stdin.readline())
v = int(stdin.readline())
nodes = dict()
for _ in range(v):
a, b = map(int, stdin.readline().split())
if a in nodes:
nodes[a].append(b)
else:
nodes[a] = [b]
if b in nodes:
nodes[b].append(a)
else:
nodes[b] = [a]
print(bfs(nodes, 1))
자바 코드는 다음과 같습니다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int v = Integer.parseInt(br.readLine());
Map<Integer, ArrayList> nodes = new HashMap<>();
for (int i = 0; i < v; i++) {
int[] ab = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
if (nodes.containsKey(ab[0])) {
nodes.get(ab[0]).add(ab[1]);
} else {
nodes.put(ab[0], new ArrayList(Arrays.asList(ab[1])));
}
if (nodes.containsKey(ab[1])) {
nodes.get(ab[1]).add(ab[0]);
} else {
nodes.put(ab[1], new ArrayList(Arrays.asList(ab[0])));
}
}
System.out.println(bfs(nodes, 1));
}
private static int bfs(Map<Integer, ArrayList> node_list, int start) {
ArrayList<Integer> need_visit = new ArrayList<>();
ArrayList<Integer> visited = new ArrayList<>();
need_visit.add(start);
while (!need_visit.isEmpty()) {
int node = need_visit.remove(0);
if (!visited.contains(node)) {
visited.add(node);
if (node_list.containsKey(node)) {
need_visit.addAll(node_list.get(node));
}
}
}
return visited.size() - 1;
}
}
'알고리즘' 카테고리의 다른 글
[알고리즘 / 백준] 1325 - 효율적인 해킹 (0) | 2020.12.08 |
---|---|
[알고리즘 / 백준] 1012 - 유기농 배추 (0) | 2020.12.08 |
[알고리즘 / 백준] 2565 - 전깃줄 (0) | 2020.12.06 |
[알고리즘 / 백준] 2156 - 포도주 시식 (0) | 2020.12.06 |
[알고리즘 / 프로그래머스] 기능개발 (0) | 2020.12.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- search
- CodeDeploy
- cloudfront
- sort
- DFS
- ionic
- AWS
- Algorithm
- 수학
- BFS
- spring
- CodePipeline
- 프로그래머스
- programmers
- 조합
- SWIFT
- ECR
- 소수
- EC2
- java
- permutation
- map
- 에라토스테네스의 체
- Combination
- Baekjoon
- 순열
- CodeCommit
- string
- Dynamic Programming
- array
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함