본문 바로가기

연습문제/JAVA

11724-연결 요소의 개수 (오답)

 

 

11724번: 연결 요소의 개수

첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주

www.acmicpc.net

 

6 8 -> 정점의 수와 간선

1 2
2 5
5 1
3 4
4 6
5 4
2 4
2 3

그래프에 위 노드를 생성하고 [{1,2},{2,5}...] 방문했는지 확인하는 visited[간선] 를 만들었다

 visited[M][M] 으로 만들지 않은 이유는 어자피 [0][0] 과  [0][1] 은 이어져있으니 같이 방문하기 때문에

for문을 돌면서 각 간선의 방문여부를 확인한다. 

만약 방문안했다면 bfs에서 그래프[i][1] 의 수와 같은 숫자를 그래프에서 for문으로 찾는다

이런식으로 [0][1] 에서 [1][0]으로 이동한다


2 5
5 1

...

만약 더이상 이동할 곳이 없으면 sum++

 

 

 

public class B11724 {
    static int N,M;
    static int[][] graph;
    static boolean[] visited;



    static void bfs(int node){
        Queue<Integer> queue =  new LinkedList<>();
        visited[node] = true;
        queue.add(node);

        while(!queue.isEmpty()){
            int temp = queue.remove();

            visited[temp] = true;
            for(int i=0; i<M; i++) {
                if(graph[temp][1] == graph[i][0] && visited[i]) {
                    visited[i] = true;
                    queue.add(i);
                }
            }
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        N = sc.nextInt();
        M = sc.nextInt();

        int sum =0;
        graph = new int[M][2];
        visited = new boolean[M];

        for(int i=0; i<M; i++){
            for(int j=0; j<2; j++){
                graph[i][j] = sc.nextInt();
            }
        }

        for(int i=0; i<M; i++){
            if(visited[i]) continue;
            bfs(i);
            sum++;
        }
        System.out.println(sum);
    }
}

 

 

제출했더니 시간초과가 떴다

다른방법을 찾아봐야겠다

'연습문제 > JAVA' 카테고리의 다른 글

7569-토마토  (0) 2022.08.09
11724-연결 요소의 개수  (0) 2022.08.09
2468-안전영역  (0) 2022.08.08
2667-단지번호붙이기  (0) 2022.08.08
2331-반복수열  (0) 2022.08.08