알고리즘

백준 2660번 회장뽑기 (JAVA)

박카스마시며코딩 2022. 1. 31. 13:52

https://www.acmicpc.net/problem/2660

 

2660번: 회장뽑기

입력의 첫째 줄에는 회원의 수가 있다. 단, 회원의 수는 50명을 넘지 않는다. 둘째 줄 이후로는 한 줄에 두 개의 회원번호가 있는데, 이것은 두 회원이 서로 친구임을 나타낸다. 회원번호는 1부터

www.acmicpc.net

 

 

저는 해당 문제를 BFS를 이용하여 문제를 해결하였습니다.

각각의 회원에서 모든 회원을 BFS로 방문하는데 걸리는 시간을 통해 해당 회원의 점수를 계산하였습니다.

각각의 회원에서 모두 점수를 확인하고 가장 낮은 점수와 같은 점수를 가진 회원들을 출력하였습니다.

 

 

 

package BOJ.BFS;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;
import java.util.function.Function;

public class BOJ_2660 {
    private static int bfs(List<Integer>[] map, int start, int n){
        Queue<Integer> q = new LinkedList<>();
        q.offer(start);
        boolean[] visited = new boolean[n+1];
        int time = -1;
        visited[start] = true;
        while(!q.isEmpty()){
            int size = q.size();
            for(int s = 0 ; s < size ; s++){
                int now = q.poll();
                for(int i = 0 ; i < map[now].size(); i++){
                    int next = map[now].get(i);
                    if(!visited[next]){
                        visited[next] = true;
                        q.offer(next);
                    }
                }
            }
            time++;
        }
        return time;
    }
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        Function<String,Integer> stoi = Integer::parseInt;
        int n = stoi.apply(st.nextToken());
        List[] map = new ArrayList[n+1];
        for(int i = 1 ; i <= n ; i++){
            map[i] = new ArrayList<>();
        }
        while(true){
            st = new StringTokenizer(br.readLine());
            int a = stoi.apply(st.nextToken());
            int b = stoi.apply(st.nextToken());
            if(a == -1 && b == -1){
                break;
            }
            map[a].add(b);
            map[b].add(a);
        }
        int min = 1_000;
        int[] score = new int[n+1];
        StringBuilder sb = new StringBuilder();
        for(int i = 1; i <= n ; i++){
            score[i] = bfs(map, i, n);
            min = Math.min(min,score[i]);
        }
        int cnt = 0;
        for(int i = 1; i <= n ; i++){
            if(score[i] == min){
                cnt++;
                sb.append(i+" ");
            }
        }
        System.out.println(min +" "+cnt);
        System.out.println(sb.toString());
    }
}

'알고리즘' 카테고리의 다른 글

백준 14950번 정복자 (JAVA)  (0) 2022.02.02
백준 16930번 달리기 (JAVA)  (0) 2022.02.01
백준 2138번 전구와 스위치 (JAVA)  (0) 2022.01.30
백준 1941번 소문난 칠공주 (JAVA)  (0) 2022.01.29
백준 12919번 A와B 2(JAVA)  (0) 2022.01.28