문제
https://www.acmicpc.net/problem/2660
풀이
Code
import java.io.*;
import java.util.*;
public class Java {
static ArrayList<Integer>[] graph;
static int[] distance;
static Map<Integer, Integer> resultDis;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
graph = new ArrayList[N + 1];
for (int i = 1; i <= N; i++) {
graph[i] = new ArrayList<>();
}
while(true) {
st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
if(a == -1 && b == -1) break;
graph[a].add(b);
graph[b].add(a);
}
resultDis = new HashMap<>(); // 각 사람 별 점수 저장
int minScore = Integer.MAX_VALUE;
// 각 회원에 대해 BFS를 적용하여 점수 계산
for (int i = 1; i <= N; i++) {
int score = bfs(i);
resultDis.put(i, score); // <회원 번호, 점수>의 형태로 해시맵에 저장
if (score < minScore) {
minScore = score; // 최소 점수 갱신
}
}
// 최소 점수(minScore)를 가진 사람들을 찾아서 리스트에 추가
List<Integer> keySet = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : resultDis.entrySet()) {
if (entry.getValue() == minScore) { // value 값이 최소 점수와 같은 사람들을 리스트에 추가
keySet.add(entry.getKey());
}
}
Collections.sort(keySet); // 오름차순 정렬
bw.write(minScore + " " + keySet.size() + "\n");
for (int i : keySet) {
bw.write(i + " ");
}
bw.write("\n");
bw.flush();
bw.close();
br.close();
}
private static int bfs(int start) {
distance = new int[graph.length + 1]; // 시작하는 사람이 바뀔 때마다 distance 배열 초기화해야됨
Arrays.fill(distance, -1);
ArrayDeque<Integer> queue = new ArrayDeque<>();
queue.add(start);
distance[start] = 0;
while (!queue.isEmpty()) {
int now = queue.poll();
for (int next : graph[now]) {
if (distance[next] != -1) continue;
queue.add(next);
distance[next] = distance[now] + 1;
}
}
int maxDistance = 0;
for (int i = 1; i < distance.length; i++) {
if (distance[i] > maxDistance) {
maxDistance = distance[i];
}
}
return maxDistance;
}
}
728x90
'Algorithm PS > Baekjoon Online Judge' 카테고리의 다른 글
[BOJ/백준] 2667 단지번호붙이기 (S1) (0) | 2024.07.13 |
---|---|
[BOJ/백준] 6118 숨바꼭질 (S1) (2) | 2024.07.08 |
[BOJ/백준] 5567 결혼식 (S2) (0) | 2024.07.05 |
[BOJ/백준] 11726 2×n 타일링 (S3) (0) | 2024.07.03 |
[BOJ/백준] 1788 피보나치 수의 확장 (S3) (0) | 2024.07.03 |