백준 15723 n단 논법

2022. 12. 21. 20:16코딩 공부 연습

반응형

백준 15723 n단 논법


  • 오늘도 찬웅이형 스터디의 n단 논법을 풀었다. vector를 사용해서 연결되는 리스트만 이어주고, 2차원 배열을 통해 상하좌우를 방문하지 않는다는 점에서 어제 풀었던 문제와
    유사했다. 다양한 DFS 문제를 접하는 것 같아서 참 좋다.
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.Vector;

public class Boj_15723 {
    static Vector<Vector<Integer>> table = new Vector<Vector<Integer>>();
    public static void main(String[] args) {
        int n;
        Scanner scanner = new Scanner(System.in);
        n = Integer.parseInt(scanner.nextLine());
        for (int i = 0; i <= 26; i++) {
            table.add(new Vector<Integer>());
        }
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(scanner.nextLine());
            int from = st.nextToken().charAt(0);
            st.nextToken();
            int to = st.nextToken().charAt(0);
            table.get(from - 'a').add(to - 'a');
        }
        int m = Integer.parseInt(scanner.nextLine());
        for (int i = 0; i < m; i++) {
            StringTokenizer st = new StringTokenizer(scanner.nextLine());
            int from = st.nextToken().charAt(0);
            st.nextToken();
            int to =st.nextToken().charAt(0);

            if (dfs(from - 'a', to - 'a') == true) {
                System.out.println("T");
            } else {
                System.out.println("F");
            }
        }
    }

    public static boolean dfs(int from, int target) {
        int visited[] = new int[26];
        Queue<Integer> q = new LinkedList<>();

        q.add(from);
        visited[from] = 1;
        while(!q.isEmpty()) {
            int cur = q.peek();
            q.remove();
            for (int i = 0; i < table.get(cur).size(); i++) {
                int cur_view = table.get(cur).get(i);
                if (cur_view == target) {
                    return true;
                }
                if (visited[cur_view] == 1) continue;
                visited[cur_view] = 1;
                q.add(cur_view);
            }
        }
        return false;
    }
}
  • 문제 자체는 어렵지 않았다. 그냥 dfs 탐색을 하다 타겟이 나오면 바로 리턴해 주었다.
  • 오히려 "a" 로 들어온 걸 string -> char -> int 로 바꾸는 과정을 혼동했는데, 그냥 charAt() 로 가져와서 int 에 저장하면
    아스키코드로 저장이 된다.

'코딩 공부 연습' 카테고리의 다른 글

백준 2078 무한이진트리  (0) 2023.01.03
백준 9251 LCS  (0) 2022.12.24
백준 13265 색칠하기  (0) 2022.12.20
백준 1932 정수 삼각  (0) 2022.12.16
백준 11726 2xn 타일링  (1) 2022.12.14