Java

[백준 1976] 여행가자 (JAVA)

iheeeee6-6 2023. 4. 27. 16:06
728x90

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

 

1976번: 여행 가자

동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인

www.acmicpc.net

 

DFS를 사용해서 맨 첫 여행지부터 시작해서 방문가능한 곳들에 대한 확인을 한다!

여행계획대로 포문을 돌려서 방문 가능한지 본다!

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {

	static ArrayList<Integer>[] list;
	static boolean visited[];

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine());
		int m = Integer.parseInt(br.readLine());
		list = new ArrayList[n + 1];
		for (int i = 0; i <= n; i++) {
			list[i] = new ArrayList<>();
		}
		StringTokenizer st;
		for (int i = 1; i <= n; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 1; j <= n; j++) {
				if (Integer.parseInt(st.nextToken()) == 1) {
					list[i].add(j);
				}
			}
		}

		int[] arr = new int[m];
		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < m; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}

		visited = new boolean[n + 1];
		check(arr[0]); //무조건 첫번째 여행지부터 시작되니까 첫번째 여행지로 부터 쭉 방문 가능한 곳들을 visited true로!!

		boolean result = true;
		for (int i = 1; i < m; i++) {
			if (!visited[arr[i]]) {
				result = false;
				break;
			}
		}

		System.out.println(result == true ? "YES" : "NO");
	}

	static void check(int sidx) {
		visited[sidx] = true;
		for (int j = 0; j < list[sidx].size(); j++) {
			int line = list[sidx].get(j);
			if (!visited[line] && list[line].size() > 0) {
				check(line);
			}
		}
	}
}

'Java' 카테고리의 다른 글

[백준 2179] 비슷한 단어 (JAVA)  (0) 2023.04.28
[백준 1522] 문자열 교환 (JAVA)  (0) 2023.04.28
[백준 24337] 가희와 탑 (JAVA)  (0) 2023.04.27
[백준 1138] 한 줄로 서기 (JAVA)  (0) 2023.04.26
[백준 13549] 숨바꼭질 3 (JAVA)  (0) 2023.04.25