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;
}
}
'알고리즘' 카테고리의 다른 글
백준 5587번 카드 캡터 상근이 (JAVA) (0) | 2023.03.02 |
---|---|
백준 20162번 간식 파티 (JAVA) (0) | 2023.03.01 |
백준 4889번 안정적인 문자열 (JAVA) (0) | 2023.02.27 |
백준 1326번 폴짝폴짝 (JAVA) (0) | 2023.02.26 |
프로그래머스 배열 뒤집기 (JAVA) (0) | 2023.02.25 |