문제
상근이는 자신의 결혼식에 학교 동기 중 자신의 친구와 친구의 친구를 초대하기로 했다. 상근이의 동기는 모두 N명이고, 이 학생들의 학번은 모두 1부터 N까지이다. 상근이의 학번은 1이다.
상근이는 동기들의 친구 관계를 모두 조사한 리스트를 가지고 있다. 이 리스트를 바탕으로 결혼식에 초대할 사람의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 상근이의 동기의 수 n (2 ≤ n ≤ 500)이 주어진다. 둘째 줄에는 리스트의 길이 m (1 ≤ m ≤ 10000)이 주어진다. 다음 줄부터 m개 줄에는 친구 관계 ai bi가 주어진다. (1 ≤ ai < bi ≤ n) ai와 bi가 친구라는 뜻이며, bi와 ai도 친구관계이다.
출력
첫째 줄에 상근이의 결혼식에 초대하는 동기의 수를 출력한다.
해결 방법
- dfs나 bfs를 사용하는 문제
- 이번 문제에서는 list를 사용하여 상근이의 동기를 표현했다.
- 노드로 주어지므로 방문 배열의 크기는 n+1이다.
- 상근이의 학번이 1이므로 1부터 dfs를 한다.
- depth를 0부터 시작하고 2가 되면 종료시킨다.
- 상근이의 친구의 친구까지 초대할 것이기 때문이다.
- 동기 리스트에 있으면 방문 배열에 동기 번호를 인덱스로 하여 방문 처리 한다.
- 방문 배열을 2부터 반복문을 돌며 방문 배열이 true 상태이면 count++ 한다.
- count를 출력한다.
코드
// 결혼식
public class Week08_5567 {
static int num;
static List<List<Integer>> friends;
static boolean[] visited;
static int count = 0;
public static void main(String[] args) throws IOException {
input();
dfs(1, 0);
output();
}
private static void dfs(int n, int depth) {
if (depth == 2) {
return;
}
for (int i : friends.get(n)) {
visited[i] = true;
dfs(i, depth + 1);
}
}
private static void output() throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (int i = 2; i < visited.length; i++) {
if (visited[i]) {
count++;
}
}
bw.write(count + "");
bw.flush();
bw.close();
}
private static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
num = Integer.parseInt(br.readLine());
friends = new ArrayList<>();
for (int i = 0; i <= num; i++) {
friends.add(new ArrayList<>());
}
visited = new boolean[num + 1];
StringTokenizer st;
int m = Integer.parseInt(br.readLine());
for (int i = 0; i < m; i++) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
friends.get(a).add(b);
friends.get(b).add(a);
}
}
}
'algorithm' 카테고리의 다른 글
| [BOJ] 1003. 피보나치 함수 (1) | 2022.12.11 |
|---|---|
| [BOJ] 4963. 섬의 개수 (0) | 2022.12.11 |
| [BOJ] 2178. 미로탐색 (0) | 2022.12.11 |
| [BOJ] 1303. 전쟁 - 전투 (0) | 2022.12.11 |
| [BOJ] 2606. 바이러스 (0) | 2022.12.11 |