문제
상근이는 자신의 결혼식에 학교 동기 중 자신의 친구와 친구의 친구를 초대하기로 했다. 상근이의 동기는 모두 N명이고, 이 학생들의 학번은 모두 1부터 N까지이다. 상근이의 학번은 1이다.
상근이는 동기들의 친구 관계를 모두 조사한 리스트를 가지고 있다. 이 리스트를 바탕으로 결혼식에 초대할 사람의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 상근이의 동기의 수 n (2 ≤ n ≤ 500)이 주어진다. 둘째 줄에는 리스트의 길이 m (1 ≤ m ≤ 10000)이 주어진다. 다음 줄부터 m개 줄에는 친구 관계 ai bi가 주어진다. (1 ≤ ai < bi ≤ n) ai와 bi가 친구라는 뜻이며, bi와 ai도 친구관계이다.
출력
첫째 줄에 상근이의 결혼식에 초대하는 동기의 수를 출력한다.
문제 풀이
해당 문제는 그래프 탐색으로 해결 할 수 있는 문제이다. 먼저 해당 문제는 현재 자신의 직접 친구와 그 친구의 친구까지만 친구로 인정이 되고 있는 문제이다. 그렇기 때문에 어디까지 탐색해야는지 기준을 잘 정해야 풀 수 있는 문제이다.
아래 그래프를 보면 쉽게 이해 할 수 있을 것이다.
현재 1의 친구는 2,3 이고 3의 친구인 4까지만 친구로 인정이 되어 총 3이라는 답을 제출 하면된다.
나의 답안
import java.io.*;
import java.util.*;
public class Main {
static List<Integer> graph[];
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int e = sc.nextInt();
graph = new ArrayList[n + 1];
for (int i = 0; i < n + 1; i++) {
graph[i] = new ArrayList<>();
}
for (int i = 0; i < e; i++) {
int u = sc.nextInt();
int v = sc.nextInt();
graph[u].add(v);
graph[v].add(u);
}
List<Integer> friends = new ArrayList<>();
for(int next : graph[1]){
if (!friends.contains(next)) friends.add(next);
for (int dNext : graph[next]) {
if(dNext != 1 && !friends.contains(dNext)) friends.add(dNext);
}
}
System.out.println(friends.size());
}
}
'BackJoon > Algorithm' 카테고리의 다른 글
(11725) 트리의 부모 찾기 (0) | 2023.04.19 |
---|---|
(11403) 경로 찾기 (0) | 2023.04.19 |
(2606) 바이러스 (0) | 2023.04.19 |
(1260번) DFS와 BFS (0) | 2023.04.19 |
(11724) 연결 요소의 개수 (0) | 2023.04.19 |