0. 친구의 친구까지만 찾는 문제
1. BFS를 딱 두번만 돌린다
- 혹은 DFS를 깊이 2에서 종료한다 (깊이 1과 2를 공유하는 node에 유의하면서)
2. 방문한 노드의 수 = 초대할 사람의 수이다
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args)throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = pint(br.readLine());
int M = pint(br.readLine());
ArrayList<ArrayList<Integer>>graph = new ArrayList<>();
for (int i = 0; i < N; i++)graph.add(new ArrayList<>());
boolean[]isV = new boolean[N];
for (int i = 0; i < M; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int x = pint(st.nextToken())-1;
int y = pint(st.nextToken())-1;
graph.get(x).add(y);
graph.get(y).add(x);
}
//1부터 시작해, 2번 안에 갈수있는 사람의 수 찾기
int count=0; //몇번 건넌 친구인지 = 몇 번 돌았는지
int friendCnt=0;
Queue<Integer>qu = new LinkedList<Integer>();
qu.offer(0); //초기 node = 자기 자신
isV[0]=true;
while(count<2) {
int len =qu.size();
for (int i = 0; i < len; i++) {
int curNode = qu.poll();
int graphLen = graph.get(curNode).size();
for (int j = 0; j < graphLen; j++) {
int nextNode = graph.get(curNode).get(j);
if(!isV[nextNode]) {
friendCnt++;
isV[nextNode]=true;
qu.offer(nextNode);
}
}
}
count++;
}
System.out.println(friendCnt);
}
static int pint(String s) {
return Integer.parseInt(s);
}
}
'알고리즘 문제 풀이 > BOJ 실버' 카테고리의 다른 글
[백준] 2346 - 풍선 터뜨리기 (0) | 2021.10.25 |
---|---|
[백준] 17276 - 배열 돌리기 (0) | 2021.10.10 |
[백준] 1325 - 효율적인 해킹 (0) | 2021.09.25 |
[백준] 14241 - 슬라임 합치기 (0) | 2021.07.07 |
[백준] 1697 - 숨바꼭질 (0) | 2021.05.29 |
[백준] 5639 - 이진 검색 트리 (0) | 2021.04.14 |
[백준] 2564 - 경비원 (0) | 2021.04.13 |