이번에 풀어본 문제는
백준 5567번 결혼식 입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static List<List<Integer>> friends;
static boolean [] isVisited;
static int N,M;
static int answer;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
friends = new ArrayList<>();
isVisited = new boolean[N + 1];
for (int i = 0; i <= N; i++) friends.add(new ArrayList<>());
M = Integer.parseInt(br.readLine());
StringTokenizer st;
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int fst = Integer.parseInt(st.nextToken());
int sec = Integer.parseInt(st.nextToken());
friends.get(fst).add(sec);
friends.get(sec).add(fst);
}
// 상근이의 친구
Queue<Integer> q = new LinkedList<>();
isVisited[1] = true;
for (int friend : friends.get(1)) {
if (!isVisited[friend]) {
isVisited[friend] = true;
answer++;
q.add(friend);
}
}
while(!q.isEmpty()) {
int next = q.poll();
for (int friend : friends.get(next)) {
if (!isVisited[friend]) {
isVisited[friend] = true;
answer++;
}
}
}
System.out.print(answer);
}
}
상근이가 결혼식에 친구와 친구의 친구까지만 초대한다고 했을 때, N명의 학생 중 초대받을 수 있는 학생 수를 출력하는 문제입니다.
입력된 친구관계를 리스트에 담아주고, 첫 번째로 상근이의 친구를 큐에 담고, 친구의 친구까지만 초대할 수 있으므로 그 친구들의 친구까지만 체크하며 카운트값을 올려주면 해결할 수 있습니다.
친구의 친구까지라서 생각보다 간단했던 문제입니다.