알고리즘

백준 15723번 n단 논법 (JAVA)

박카스마시며코딩 2023. 2. 28. 14:09

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

 

15723번: n단 논법

m개의 줄에 걸쳐 각 줄에 결론이 참인지 거짓인지 출력하라. 참일 경우 T, 거짓일 경우 F를 출력하라. 알 수 없는 경우도 거짓이다. 답은 필히 대문자로 출력해야 한다.

www.acmicpc.net

 

 

 

 

package BOJ.bfs;

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

public class BOJ_15723 {
    private static final int SIZE = 26;
    private static final char TRUE = 'T';
    private static final char FALSE = 'F';
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Function<String,Integer> stoi = Integer::parseInt;
        int n = stoi.apply(br.readLine());
        boolean[][] map = new boolean[SIZE][SIZE];
        for(int i = 0 ; i < n ; i++){
            String command = br.readLine();
            char start = command.charAt(0);
            char end = command.charAt(5);
            map[start - 'a'][end - 'a'] = true;
        }
        n = stoi.apply(br.readLine());
        for(int i = 0 ; i < n ; i++){
            String command = br.readLine();
            char start = command.charAt(0);
            char end = command.charAt(5);
            if(isRight(start-'a',end-'a',map)){
                System.out.println(TRUE);
            }else{
                System.out.println(FALSE);
            }
        }
    }

    private static boolean isRight(int start, int end, boolean[][] map) {
        Queue<Integer> q = new LinkedList<>();
        q.offer(start);
        boolean[] visited = new boolean[SIZE];
        visited[start] = true;
        while(!q.isEmpty()){
            int now = q.poll();
            if(now == end){
                return true;
            }
            for(int i = 0 ; i < SIZE ; i++){
                if(!visited[i] && map[now][i]){
                    visited[i] = true;
                    q.offer(i);
                }
            }
        }
        return false;
    }
}