개발자 톡

연습문제 톡 [HSAT 6회 정기 코딩 인증평가 기출] 출퇴근길

출퇴근길 BFS로는 안풀리나요? 반례나 문제점 부탁드립니다.

등록일
2023-03-31 08:37:37
조회수
1046
작성자
smhyun128

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String args[]) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int n, m;

        st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        // 그래프 n 개 정점
        List[] adjList = new ArrayList[n + 1];

        for (int i = 1; i <= n; i++) {
            adjList[i] = new ArrayList();
        }

        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());
            int start = Integer.parseInt(st.nextToken());
            int end = Integer.parseInt(st.nextToken());
            // 일방 통행
            adjList[start].add(end);
        }

        // 시작점과 끝 점의 경로가 하나 이상은 무조건 존재함
        st = new StringTokenizer(br.readLine());
        int S = Integer.parseInt(st.nextToken());
        int T = Integer.parseInt(st.nextToken());

        // 각 정점에서 출발점과 도착점까지 갈 수 있는지 체크
        boolean[] visitedS = new boolean[n + 1];
        boolean[] visitedT = new boolean[n + 1];
        bfs(adjList, S, visitedS, T);
        bfs(adjList, T, visitedT, S);

        int ans = 0;
        for (int i = 1; i <= n; i++) {
            if (i == S || i == T) continue; // 시작점이나 도착점인 경우에는 건너뜀
            if (visitedS[i] && visitedT[i]) {
                ans++;
            }
        }

        System.out.println(ans);
    }

    private static void bfs(List[] adjList, int start, boolean[] visited, int end) {
        Queue queue = new LinkedList();
        queue.add(start);
        visited[start] = true;

        while (!queue.isEmpty()) {
            int cur = queue.poll();

            for (int next : adjList[cur]) {
                if (visited[next] || next == end) continue;
                visited[next] = true;
                queue.add(next);
            }
        }
    }
}



#[hsat_6회_정기_코딩_인증평가_기출]_출퇴근길
#java

이 카테고리의 톡 더보기